Два запроса против одного запроса, производительность - PullRequest
0 голосов
/ 13 мая 2009

В PHP + MySQL + PDO было бы намного медленнее

  • Получить ID предмета по имени
  • Получить данные по номеру

чем просто

  • Получить данные элемента по имени

Последний - только один запрос, поэтому, очевидно, быстрее. Тем не менее, первый делает код более чистым (поскольку идентификатор элемента часто заранее известен), поэтому было бы лучше, если бы разница в производительности была достаточно мала.

Код, в котором я использую это:

открытая функция actionView () {

    // read http request
    ...

    // get item
    $itemModel = new Rust_Model_Item();
    try {
        $id = $itemModel->getItemIdByUrlTitle($urltitle);
        $item = $itemModel->getItem($id); // lots of data
    } catch (Rust_Model_Item_NotFoundException $e) {
        throw new FastMVC_Web_Error(404, 'Item not found');
    }

    ...

}

http://code.heukelom.net/filedetails.php?repname=rust&path=%2Ftrunk%2Flib%2Fclasses%2FRust%2FController%2FItem.php

публичная функция getItem ($ id) {

    $item = $this->getItemBasics($id);

    $catModel = new Rust_Model_Category();
    $item['category'] = $catModel->getById($item['category_id']);

    $ratingModel = new Rust_Model_Rating();
    $item['rating'] = $ratingModel->getForItem($id);

    $pageModel = new Rust_Model_Page();
    $item['pages'] = $pageModel->getListForItem($id);

    $tagModel = new Rust_Model_Tag();
    $item['tags'] = $tagModel->getForItem($id);

    return $item;

}

http://code.heukelom.net/filedetails.php?repname=rust&path=%2Ftrunk%2Flib%2Fclasses%2FRust%2FModel%2FItem.php

Ответы [ 2 ]

2 голосов
/ 13 мая 2009

Вы должны разработать свой запрос так, чтобы поля, которые вы используете в предложении WHERE, имели правильные ключи и индексы, настроенные на них, и использовали только один запрос для их выбора.

1 голос
/ 13 мая 2009

Почему бы не создать один запрос, который получает данные элемента по идентификатору, поместив индекс в идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...