我有一个表,我在其中添加了几个复合键:
CREATE INDEX idx_foo on my_table(col_one, col_two, col_three);
CREATE INDEX idx_bar on my_table(col_one, col_four, col_three);
为什么当我在下面的查询中使用EXPLAIN
时,MySQL会告诉我它使用了不太合适的idx_bar
密钥?
SELECT col_one, col_two, col_three, col_four FROM my_table
WHERE col_one = 'a'
AND col_two = 1
AND col_three = 1
退货:
'1', 'SIMPLE', 'my_table','ref','IDX_E93438563DAE168B,idx_foo,idx_bar','idx_bar','767','const','6688','Using index condition; Using where'
我是高估了MySQL的匹配引擎,还是犯了一个错误?使用FORCE INDEX
的唯一解决方案是什么?
等待!你说col_one
是独一无二的?然后以col_one
开始的任何索引都将在中找到答案尝试!
所以,这就是它选择"错误"指数的原因:它更小。