【问题标题】:Mysql LEFT JOIN is slowMysql LEFT JOIN 很慢
【发布时间】:2013-07-16 18:35:36
【问题描述】:

我有以下代码,它返回 10 个条目。现在好像很慢。

SELECT a.id
       , a.patient_name
       , a.phone
       , p2.card_number 
 FROM patients as a
 LEFT JOIN patient_insurance as p2
 ON a.id=p2.patient 
 WHERE a.patient_name LIKE '%$_GET[term]%' 
       OR a.id LIKE '%$_GET[term]%' 
       OR a.phone LIKE '%$_GET[term]%' 
       OR p2.card_number LIKE '%$_GET[term]%' 
 LIMIT 10

我在患者表中有 12,107 个条目 patient_insurance 表中有 2,296 个条目

这是一个至强 2 处理器的 linux 服务器,具有 16GB 内存。本地托管

【问题讨论】:

  • 可能你的表没有正确索引。是否应该按患者 ID 进行索引?
  • (旁白:您的代码易受 SQL 注入攻击。)任何索引?有什么方法可以重塑数据以避免通配符前缀?考虑全文搜索?
  • 给我一个更好的代码,这个网站是本地托管的,甚至没有连接到互联网
  • @eggyal 你为什么不喜欢我:(
  • 运行查询的解释并在此处发布结果。它将向我们展示查询在做什么。这篇文章没有足够的信息来解决它

标签: mysql left-join mysql-slow-query-log


【解决方案1】:

任何使用带有通配符的LIKE 的查询都必然比使用全文搜索解决方案慢数百或数千倍。没有可以在字符串列上定义的常规 B 树索引,这将使通配符搜索更快。

请阅读我的演示文稿Full Text Search Throwdown,其中我比较了几种 MySQL 全文搜索解决方案。

简短的回答是:使用Sphinx Search

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2014-03-15
    • 2015-03-16
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多