联接表上的MySQL Force索引-当优化器首先从联接表中选择时

时间:2018-09-25 15:05:13

标签: mysql indexing force-index

我有一个如下查询:

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 不知道这是否是原因的根源?

1 个答案:

答案 0 :(得分:0)

原来的问题与原始问题无关,这是因为我在where子句中使用了函数。

更改该子句的来源:

WHERE year(columnZ) = 2018

收件人:

WHERE columnZ >= '2018-01-01 00:00:00'

解决了该问题。