pdo查询优化

zvms9eto  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(375)

我使用了一个join查询,它工作得很好,但是需要很长时间(使用mysql工作台需要30秒)。如何通过重写下面的查询来提高执行时间。查询如下:,

$queryBuilder = $this->getQueryBuilder();
            $queryBuilder
                ->select('count(*) as numberValidatedParts')
                ->from($this->tableName, 'p') // p for parts table
                ->innerJoin('p', 'cpk_catalog', 'cc', 'cc.part_id = p.part_id')
                ->innerJoin('p', 'images_catalog', 'ic', 'ic.sku_id = cc.sku_id')
                ->innerJoin('p', 'images', 'i', 'i.ImageId = ic.ImageId')
                ->where('i.IsValidated = 1')            
                ->andWhere('p.is_active = 1')            
                ->groupBy('cc.sku_id')
                ->having('numberValidatedParts = (
                    select count(*) as totalNumberOfParts
                    from images_catalog as ic
                    where ic.`sku_id`=cc.`sku_id`
                )');
            $sql = sprintf('select count(*) from (%s) as number', $queryBuilder->getSQL());
            return $this->doctrine->query($sql)->fetch(PDO::FETCH_COLUMN);
jvlzgdj9

jvlzgdj91#

我可以看出四个可能的原因:
检查所有相关表上的索引和关系
“having”是在查询之后执行的,这会使查询变慢
在“having”中使用子select。
将querybuilder中的整个查询用作“select count(*)查询的子查询

相关问题