0

我正在文本框上实现 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 个表时,自动完成几乎立即显示(当然数据不准确)。为什么我的加入会大大减慢它的速度?我需要加入..有没有办法加快我错过的速度,还是我需要一个全新的实现?

4

1 回答 1

1

EXPLAIN在 MySQL 中运行以查看为什么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条件往往非常缓慢,因为无论您在该列上设置什么索引,数据库都必须进行全表扫描。看看你能不能以某种方式改变它。可以==代替LIKE吗?

于 2013-05-02T20:35:28.453 回答