我正在从两个不同数据库的表中加入:
SELECT
count(*)
FROM
`db1`.`view1` p
join
`db2`.`table1` e
on e.Migration = p.s_encargo and e.did=149;
我在table1中创建了一个像这样的索引:
alter table table1 add INDEX `DID_Migration` (`DID`, `Migration`);
我在索引中添加了我在on子句中使用的两个字段('做了'和'迁移')
但是当我执行查询时,只使用了索引的第一列(did): 这是查询的解释。
但如果我展示了另一个查询的解释:
select * from table1 where Migration = '100008600' and did=149;
为什么第一个查询只使用索引的第一列,而第二个查询使用两列?
答案 0 :(得分:0)
key_len列指示MySQL决定使用的密钥的长度。 key_len的值使您可以确定MySQL实际使用的多部分密钥的多少部分。
这意味着对于您声明的查询,mysql选择仅使用第一部分
在这种情况下,您可以使用force(或use)来强加您想要的索引
SELECT
count(*)
FROM
`db1`.`view1` p
join
`db2`.`table1` e FORCE INDEX FOR JOIN (`DID_Migration`)
on e.Migration = p.s_encargo and e.did=149;