MySQL索引在加入时不起作用

时间:2017-10-02 11:25:35

标签: mysql sql join

我正在从两个不同数据库的表中加入:

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): enter image description here 这是查询的解释。

但如果我展示了另一个查询的解释:

select * from table1 where  Migration = '100008600' and did=149;

这使用索引的所有列: enter image description here

为什么第一个查询只使用索引的第一列,而第二个查询使用两列?

1 个答案:

答案 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;