我正在使用某些时钟软件,并试图寻找证据证明时钟日志已被篡改。这是我的查询:

EXPLAIN SELECT log1.userName, log1.logID
FROM timeLog log1
JOIN timeLog log2 ON log1.logID = log2.logID + 1
JOIN timeLog log3 ON log1.logID = log3.logID - 1
WHERE log1.timeIN NOT BETWEEN log2.timeIN AND log3.timeIN;


问题是查询需要很长时间。这是说明:



因此,log2和log3的类型为ALL-不是eq_ref。如果将它们与logID而不是logID +/-常量进行比较,则它们将是eq_ref,每行1行,而不是259942。

查找添加到标量常量的索引值时,是否可以利用索引?

最佳答案

您是否尝试将ON条件重写为:

SELECT log1.userName, log1.logID
  FROM timeLog log1
  JOIN timeLog log2 ON log2.logID = log1.logID - 1
  JOIN timeLog log3 ON log3.logID = log1.logID + 1
 WHERE log1.timeIN NOT BETWEEN log2.timeIN AND log3.timeIN;


通常,您希望在=的一侧保持索引列不变,我倾向于左侧。

10-08 12:55