【问题标题】:jQuery AutoComplete - Query Database with JOINjQuery AutoComplete - 使用 JOIN 查询数据库
【发布时间】:2013-04-27 03:46:49
【问题描述】:

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

【问题讨论】:

    标签: jquery mysql jquery-ui autocomplete


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

    【讨论】:

    • 酷,我会检查一下并回复你。我需要LIKE 来完成用户的输入,例如Mor输入需要匹配Moretti
    • 哦,我的.. 正在使用索引.. 并且.. 它工作得更快 :) 谢谢
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 2014-05-24
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2012-04-28
    • 2011-10-23
    相关资源
    最近更新 更多