【发布时间】:2023-03-09 05:53:01
【问题描述】:
我的查询如下所示:
SELECT columnA, columnB, ...
FROM tableA
JOIN tableB USING (columnX)
JOIN tableC USING (columnY)
WHERE
tableC.columnZ = zzz AND
tableA.columnA = aaa
GROUP BY ...
当我在这个查询上运行EXPLAIN 时,它显示查询优化器首先从tableC 中选择,但由于某种原因它不使用索引,即使我在tableC.columnZ 上有一个索引。
如何在此查询中强制使用tableC.columnZ?我试过了:
...
JOIN tableC USING (columnY) FORCE INDEX FOR JOIN (columnZ)
...
但这并没有强制使用该索引。
我也试过改变选择的顺序:
...
FROM tableC FORCE INDEX (columnZ)
JOIN tableA USING (columnY)
JOIN tableB USING (columnX)
...
这也没有用。
有关如何强制使用此索引的任何建议,或任何其他使此查询更快的建议?
注意:columnZ 是 DATETIME 列,WHERE 子句是:
WHERE year(columnZ) = 2018
不知道这是否是根本原因?
【问题讨论】:
-
也许问题出在 year(columnZ) 你试过硬编码日期字符串吗?
-
是的,这就是问题所在。将尝试将日期硬编码为指定年份的 1 月 1 日并使用 >=
标签: mysql indexing force-index