我有一个小问题,我无法解决。
这个查询正是我所需要的,只是它需要很长时间并且只会杀死 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(子查询)效率更高。但该查询仍然存在问题,因为它必须对 inventory
和 clients
表中的每一行执行完整扫描。
关于MySQL IN 子句太慢,无法使 JOIN 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186602/