【发布时间】:2023-03-18 05:25:01
【问题描述】:
我有一个如下所示的 MySql 查询:
SELECT trace_access.Employe_Code, trace_access.Employe_Prenom,
trace_access.Employe_Nom, , trace_access.Evenement_Date, trace_access.Evenement_Heure
FROM trace_access
INNER JOIN emp
ON trace_access.Employe_Code = emp.Employe_CodeEmploye
LEFT JOIN user
ON emp.Employe_ID = user.Employe_ID
LEFT JOIN role
ON role.User_ID = user.User_ID
WHERE trace_access.Employe_Nom Not Like "TEST%NU"
ORDER BY trace_access.Evenement_Date DESC , trace_access.Evenement_Heure DESC
“trace_access”表包含近 2000 万个条目。
当我解释查询时:
我的问题是为什么 MySql 没有使用 emp 表的键以及如何避免“使用临时;使用文件排序”??
我曾试图强迫它使用我的索引,但没有奏效。 查询持续一小时以上,在/tmp文件夹中写入超过8Go的文件!!!
有什么帮助吗?
非常感谢。
【问题讨论】:
-
我怀疑基于 NOT 的条件是否会使用索引,当它是 LIKE 时更糟。但是像这样的简单 Select 不应该只在 2000 万行上运行一个小时。返回多少行?
-
发生了一些奇怪的事情。请为表格提供
SHOW CREATE TABLE;我怀疑数据类型不一致。 -
查询中有多余的逗号','。这是您实际运行的查询吗?
标签: mysql sql performance indexing sql-order-by