为什么同一个查询会将index_merge与某些数据的cross和index_subquery用于其他数据

时间:2017-05-03 19:40:30

标签: mysql

该查询正在筛选所有具有特定位置产品的制造商[针对特定客户]。

对于96行

,此查询耗时0.16秒
SELECT manufac_id
  FROM manufac
 WHERE client_id = 4
   AND manufac_id IN
    (
       SELECT DISTINCT manufac_id
         FROM product
        WHERE client_ID = 4 
          AND location_ID = 11
    )

这对于50行来说需要2.3秒

SELECT manufac_id
  FROM manufac
 WHERE client_id = 7
   AND manufac_id IN
    (
       SELECT DISTINCT manufac_id
         FROM product
        WHERE client_ID = 7
          AND location_ID = 23
    )

因此,对于1/2的数据,第二个大约需要10倍!?!?!?

具有更快查询的客户端实际上有更多数据(更多),当我使用EXPLAIN时,第一个查询显示正常index_subquery,但第二个查询显示index_merge使用相交。

我无法弄清楚为什么这个客户端的数据对于这个查询来说是如此之慢。

我不是在寻找修改或优化查询的方法,只是想知道可能导致这种情况的原因。

0 个答案:

没有答案