mysql - 连接表需要很长时间 symfony 2.7

标签 mysql query-optimization

我有以下查询,需要超过 20 秒(20138 毫秒)才能返回结果。

$locale = 'en'; // test

$query = $this->getEntityManager()->createQuery('
        SELECT
         product.id, product.productnr, ProductGrp.productgrp' . $locale . ', Criteria.criteria'.$locale.'
        FROM
            Productbundle:product product
        JOIN
            Productbundle:Criteria Criteria WITH Criteria.criteriaid =  product.criteriaid
        JOIN
            Productbundle:ProductGrp ProductGrp WITH ProductGrp.partgrpid =  product.partgrpid
        WHERE
            product.productnr =:productnr
        ')
        ->setMaxResults(1)
        ->setParameter('productnr', $productnr)
        ->getResult();

当我从“可运行查询”运行查询时,在 phpmyadmin 中花费了大约 20 秒(20.7809)。

可运行的查询:

SELECT o0_.id AS id0, o0_.productnr AS productnr1, o1_.productgrpen AS productgrpen2, o2_.criteriaen AS criteriaen3 
FROM product o0_ 
INNER JOIN Criteria o2_ ON (o2_.criteriaid = o0_.criteriaid) 
INNER JOIN ProductGrp o1_ ON (o1_.partgrpid = o0_.partgrpid) 
WHERE o0_.productnr = 'ABC1234' 
LIMIT 1;

但是,当我在 phpmyadmin 中运行以下代码时,返回结果只需要不到 2 秒的时间

SELECT product.id, product.productnr,ProductGrp.productgrpen ,Criteria.criteriaen
FROM `product` 
INNER JOIN ProductGrp ON ProductGrp.partgrpid = product.partgrpid 
INNER JOIN Criteria ON Criteria.criteriaid = product.criteriaid 
Where productnr = 'ABC1234'
LIMIT 1 

表格尺寸

-------------------------------
|Product    | over 5mill rows |
-------------------------------
|ProductGrp | over 200 rows   |
-------------------------------
|Criteria   | over 600 rows   |
-------------------------------

Symfony 版本:2.7

最佳答案

索引虽然没有列出,但我建议如下

table      indexed on 
Product    (productnr, id, criteriaid, partgrpid )
Criteria   (criteriaid )  -- would expect as primary key
ProductGrp (partgrpid )   -- also would expect

此外,您有/支持多少个“区域设置”字符串版本列。

关于mysql - 连接表需要很长时间 symfony 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37345463/

相关文章:

mysql - 如何优化mysql join查询,不使用join

mysql - 如何在 where 子句中优化 mysql 中的日期时间比较

mysql - 加速复杂的多连接 MySQL 查询(如果重要的话可以通过 CakePHP 创建)

mysql - 需要帮助来优化查询

python - 在 sqlite3/Python 中的 "select"期间缓存了哪些数据,这可以从一开始就手动完成吗?

python - 使用 SQLAlchemy 替换 MySQL 字符串

mysql - 从串联字符串中选择动态列名称

php - 尝试对单个 mysql 查询中的数据进行排序和显示

mysql - 对表本身的选择/连接查询非常慢

MYSQL,需要所有日期和第一个日期的列表