mysql check exist_mysql – 使用多个EXIST进行查询
縮短你可以
select *
from rooms r
where @N = (select count(distinct eq_id)
from equipments
where eq_id IN ('eq1','eq2',...,'eqN') and room_id=r.id)
編輯
但不確定它是否真的會讓它更快……恰恰相反,帶有EXISTS和EXISTS的版本有機會在第一個false上修剪執行分支,上面必須實際計算不同的值(遍歷所有記錄)和看看那個價值是什么.
所以你應該考慮更快的事情:
>一次通過與房間相關的所有記錄(一個相關的子查詢)或
>為每個房間運行N(最壞情況)相關(但高度選擇性的子查詢)
這取決于你的數據的統計數據(我認為如果大多數房間里沒有所有需要的設備,那么你的初始版本應該更快,如果大多數房間都有所有設備,那么建議的版本可能表現更好;此外,如果EXISTS版本更快,請首先嘗試最有可能失敗的查詢,即首先檢查最稀有的設備)
您也可以嘗試使用GROUP BY的版本
select r.*
from rooms r join
equipments e on r.id = e.room_id
group by r.id
where eg_id in ('eq1','eqN')
having count(distinct e.eq_id) = @N
(以上sql未經測試)
總結
以上是生活随笔為你收集整理的mysql check exist_mysql – 使用多个EXIST进行查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql主从复制 drbd_MySql
- 下一篇: nvidia docker容器不支持中文