在MySQL中查询速度慢

时间:2014-12-19 07:08:41

标签: mysql sql

我有这个查询

SELECT 1

FROM  GEM_001_2014.LINEAS L INNER JOIN GEM_001_2014.ALBARANES A
ON(L.NUM_SERIE = A.NUM_SERIE AND L.NUM_ALBARAN = A.NUM_ALBARAN)

WHERE
      (  L.COD_ART LIKE '%1l%' )

ORDER BY A.FECHA DESC  LIMIT 500

并且此查询花费20秒...如果我删除ORDER AND LIMIT花费6秒并且如果我删除WHERE句子花费0.004秒...

解释是

1, 'SIMPLE', 'A', 'index', 'PRIMARY', 'INDICE_3', '32', '', 83, 'Using index'
1, 'SIMPLE', 'L', 'ref', 'PRIMARY', 'PRIMARY', '35', 'gem_001_2014.A.NUM_SERIE,gem_001_2014.A.NUM_ALBARAN', 6, 'Using where'

LINEAS表有486164行 和 ALBARANES表有5903行

为什么这么慢?

两个表都有主要索引,NUM_SERIE中的LINEAS,NUM_SERIE中的NUM_ALBARAN,NUM_LINEA和ALBARAN,NUM_ALBARAN

谢谢!

2 个答案:

答案 0 :(得分:0)

一些性能调整技巧:

如果您对MySQL中的性能问题有任何疑问发布explain。这是您对查询进行性能调整所需的第一件事。

那说.....

如果您打算在订单中使用它,则可能需要A.FECHA上的索引,并且执行LIKE '%whatever%'会对性能造成严重影响。也许看完全text indexes但是性能通常是开放式外卡搜索的问题。

答案 1 :(得分:0)

LIKE过滤器只能在位图树遍历期间使用第一个通配符之前的字符。您的第一个字符是通配符,使索引无法使用。