我有一個名爲Staff的表和一個名爲Supervisors的表。SQL慢嵌套查詢
人員有StaffID
,FirstName
,LastName
,等...
監事包含RelationshipID
,StaffID
,SupervisorID
,SetBy
,SetOn
,Status
。
基本上,主管表爲我們提供了員工自我關係的審計線索。我們有一張員工表,我們有一張員工表:員工關係(主管:員工)和一些額外信息(過時的,最新的,不正確的)以及設置它的時間和設置時間的StaffID。
現在,我在寫一個查詢來查找所有孤兒職員。我有:
SELECT *
FROM Staff
WHERE StaffID NOT IN (SELECT StaffID
FROM Supervisors
WHERE Status = 0
OR Status = 2);
(狀態0是從企業DB和2初始加載修改已經覈實了所有其它的是「過時的」,「不正確」,等等記錄。)
的問題是我有超過6000名員工和超過5000名員工:主管關係,這基本上是一個NxM查詢,意味着MySQL必須篩選300萬個排列組合。
我不是SQL忍者,有沒有更好的方法來做到這一點?
(注意,我不希望被經常運行在所有這類查詢)
我不能想象,如果你有合適的指標來代替,這將是非常緩慢的。如果您尚未查看'StaffId'和'Status',請設置索引並查看查詢速度下降。 – AlienWebguy
@AlienWebuy它實際上超時了30秒的php限制,但我修改了數據庫以獲得更多索引,而現在OMG Ponies的查詢所需時間不到一秒。 – Ozzah