我正在嘗試運行查詢以在兩個單獨的表中查找匹配值,但我對執行時間不滿意。我想知道是否有一些不同的語法可以用來代替 ROW() 來提供更好的性能。
當前查詢:
SELECT de.rowID, de.EffRate, li.SessionID FROM tblClockDetail li
INNER JOIN tblCardDetail de
ON de.TimeIn = li.LogInTime AND
de.TimeOut = li.LogOutTime AND
de.Employee = li.Employee
WHERE ROW(de.Employee, li.SessionID) IN (SELECT * FROM tblSessionDetails)
任何幫助表示贊賞!
uj5u.com熱心網友回復:
事實證明,我所需要的只是一些額外的 WHERE 檢查:
WHERE ROW(de.Employee, li.SessionID) IN (SELECT * FROM tblSessionDetails)
AND li.SessionID IS NOT NULL AND
li.SessionID != 0
這大大減少了我的執行時間。
uj5u.com熱心網友回復:
從歷史上看,“行建構式”的優化很差。
看看簡單的 JOIN 是否效果更好:
SELECT de.rowID, de.EffRate, li.SessionID
FROM tblClockDetail AS li
JOIN tblCardDetail AS de
ON de.TimeIn = li.LogInTime
AND de.TimeOut = li.LogOutTime
AND de.Employee = li.Employee
JOIN tblSessionDetails AS td
ON de.Employee = td.Employee
AND li.SessionID = td.SessionID;
使用這些復合索引:
de: INDEX(TimeIn, TimeOut, Employee)
li: INDEX(LogInTime, LogOutTime, Employee, SessionID)
td: INDEX(Employee, SessionID)
為了進一步討論,請提供SHOW CREATE TABLE與EXPLAIN SELECT ...和有多大的表是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/390172.html
