我有这个查询
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
谢谢!
答案 0 :(得分:0)
一些性能调整技巧:
如果您对MySQL中的性能问题有任何疑问请发布explain。这是您对查询进行性能调整所需的第一件事。
那说.....
如果您打算在订单中使用它,则可能需要A.FECHA
上的索引,并且执行LIKE '%whatever%'
会对性能造成严重影响。也许看完全text indexes但是性能通常是开放式外卡搜索的问题。
答案 1 :(得分:0)
LIKE过滤器只能在位图树遍历期间使用第一个通配符之前的字符。您的第一个字符是通配符,使索引无法使用。