微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – YII SQL查询优化

我有一个巨大的ID列表,我需要通过表查询,以查找表中是否有这些ID,如果是获取其模型.

由于我使用CActiveRecord :: find()方法,因此成千上万的ID这个过程非常慢

恩. $book = Book :: model() – > find(‘book_id =:book_id’,array(‘:book_id’=> $product-> book_id));

我甚至索引了所有可能的密钥,仍然没有改进.
有什么建议可以提高执行速度吗?

提前致谢 :)

解决方法:

1)
列出书籍ID

foreach $product in Product-List
    $book_ids[$product->book_id] = $product->book_id;

现在查询所有Book模型(由book_id索引)

$books = Book::model()->findAll(array(
    'index' => 'book_id',
    'condition' => 'book_id IN (' . implode(',', $book_ids). ')',
));

在您的代码中集成$books,我相信您正在遍历所有产品.

foreach $product in Product-List
    if( isset($books[$product->book_id]) )
        $model = $books[$product->book_id]

2)另一种方式(我假设你有产品型号)

在产品模型中添加与Book的关系

public function relations() {
    .......
    'book'=>array(self::HAS_ONE, 'Book', 'book_id'),
    .......
}

在检索产品列表时,添加’with’=>数组(‘book’)条件,使用任何CActiveDataProvider或CActiveRecord …

//Example
$productList = Product::model()->findAll(array(
    'with' => array('book'),
));

foreach( $productList as $product ) {
    .......
    if( $product->book != null )
        $model = $product->book;
    ......
}

无论哪种方式,您都可以减少SQL查询.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐