我正在文本框上实现jQuery自动完成库。我在后端的SQL查询使用JOIN:
SELECT DISTINCT wcc.ItemCode, gwbo.ItemName FROM TBL1 gwbo
INNER JOIN TBL2 wcc ON gwbo.ItemCode = wcc.ItemCode
WHERE wcc.ItemCode LIKE '$term%' OR gwbo.ItemName LIKE '%$term%'
AND wcc.CountStatus != 2 ORDER BY wcc.ItemCode LIMIT 0, 10
这需要大约25秒才能让自动填充框填充并显示..但是,当我删除JOIN并只查询1表时,自动完成几乎立即显示(当然数据不准确)。为什么我的加入如此急剧减缓?我需要加入..有没有办法加快我的速度,或者我需要一个全新的实现?
答案 0 :(得分:1)
在MySQL中运行EXPLAIN
以了解JOIN
花费这么长时间的原因,以及您可以设置哪些索引来加快速度。
EXPLAIN SELECT DISTINCT wcc.ItemCode, gwbo.ItemName FROM TBL1 gwbo
INNER JOIN TBL2 wcc ON gwbo.ItemCode = wcc.ItemCode
WHERE wcc.ItemCode LIKE '$term%' OR gwbo.ItemName LIKE '%$term%'
AND wcc.CountStatus != 2 ORDER BY wcc.ItemCode LIMIT 0, 10
似乎在ItemCode
上设置索引可以加快查询速度。我建议添加它,然后再次运行EXPLAIN
以查看数据库是否正在使用新创建的索引。
此外,LIKE
条件往往非常慢,因为无论您在该列上设置什么索引,db都必须执行全表扫描。看看你是否能以某种方式改变它。它可以是==
而不是LIKE
吗?