繁体   English   中英

两个查询vs一个查询,性能

[英]Two queries vs one query, performance

在PHP + MySQL + PDO中,这样做会慢很多吗

  • 通过名称获取商品的ID
  • 通过ID获取商品数据

比只是

  • 按名称获取商品数据

后者只是一个查询,因此显然更快。 前者虽然使代码更整洁(因为通常也事先知道项的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

您应该设计查询,以便在WHERE子句中使用的字段具有正确的键和索引设置,并且只能使用一个查询来选择它们。

为什么不创建一个按ID获取项目数据的查询,并在ID上添加索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM