我有一个如下查询:
A a = (x,y) -> b.doSthElse(x,y);
当我对此查询运行SELECT columnA, columnB, ...
FROM tableA
JOIN tableB USING (columnX)
JOIN tableC USING (columnY)
WHERE
tableC.columnZ = zzz AND
tableA.columnA = aaa
GROUP BY ...
时,它显示查询优化器首先从EXPLAIN
中进行选择,但是由于某种原因,它不使用索引,即使我在{{ 1}}。
如何在此查询中强制使用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
不知道这是否是原因的根源?
答案 0 :(得分:0)
原来的问题与原始问题无关,这是因为我在where子句中使用了函数。
更改该子句的来源:
WHERE year(columnZ) = 2018
收件人:
WHERE columnZ >= '2018-01-01 00:00:00'
解决了该问题。