MySQL IN 子句太慢,无法使 JOIN 正常工作

标签 mysql join search sql-like multiple-tables

我有一个小问题,我无法解决。

这个查询正是我所需要的,只是它需要很长时间并且只会杀死 mysql 守护进程。

"SELECT * 
 FROM inventory 
 WHERE 
    mac LIKE '%".$s."%' 
    OR uid IN (SELECT id FROM clients WHERE username LIKE '%".$s."%')"

正确的方法是使用 JOIN 子句,但不幸的是我无法让它工作。

基本上,我尝试搜索两个表,然后根据 mac 地址或用户名选择记录。

如有任何帮助,我们将不胜感激!

最佳答案

这是一种方法:

"SELECT i.*
   FROM inventory i
   LEFT
   JOIN ( SELECT c.id
            FROM clients c
           WHERE c.username LIKE '%".$s."%'
           GROUP BY c.id
        ) v
     ON v.id = i.uid
  WHERE i.mac LIKE '%".$s."%'
     OR v.id IS NOT NULL"

这应该比为库存表中的每一行重新执行 IN(子查询)效率更高。但该查询仍然存在问题,因为它必须对 inventoryclients 表中的每一行执行完整扫描。

关于MySQL IN 子句太慢,无法使 JOIN 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186602/

相关文章:

MySQL按另一张表的SUM字段查询顺序

php - For cycle & MYSQL 在 $i var 上乘以变量值

amazon-web-services - 雅典娜 : Minimize data scanned by query including JOIN operation

Mysql 搜索不区分大小写

mysql - Symfony - 数据库链接列

mysql 选择某些内容(如果存在)

mysql - 防止 SQL 查询中出现重复

php - 使用 Elastica 库删除 ElasticSearch 中的文档

javascript - 使用 Javascript/jQuery 持续返回 ajax 结果?

java - 使用 GeneratedValue 作为主键的 Hibernate SaveOrUpdate