【问题标题】:MySQL multi-column indexes and OR statementMySQL多列索引和OR语句
【发布时间】:2013-01-30 10:43:10
【问题描述】:

我发现了一个关于 MySQL 索引的interesting SitePoint article

上面的文章谈到了“AND”语句,其中“SELECT”之类的

SELECT peopleid 
FROM people 
WHERE firstname='Mike' 
    AND lastname='Sullivan' 
    AND age=17

可以利用像

这样的多列索引
ALTER TABLE people 
    ADD INDEX fname_lname_age (firstname,lastname,age);

但在我的网络应用程序中,我经常有一个文本字段输入,用户可以在其中输入部分名字或姓氏,从而产生如下查询:

SELECT peopleid 
FROM people 
WHERE ((firstname LIKE '%$parameter%') 
        OR (lastname LIKE '%$parameter%')) 
    AND age=17

那么,在这种情况下,多列索引是否也能提高性能?

提前致谢

【问题讨论】:

    标签: mysql indexing multiple-columns


    【解决方案1】:

    官方MySQL manual有专门的章节介绍这个。

    但你真正应该了解的是EXPLAIN。将它放在您的查询前面,如下所示:

    EXPLAIN SELECT peopleid 
    FROM people 
    WHERE ((firstname LIKE '%$parameter%') 
            OR (lastname LIKE '%$parameter%')) 
        AND age=17
    

    并且可以查看是否使用了索引。

    【讨论】:

    • 感谢本章!似乎我的答案的问题是“否”:具有“OR”连接的不同字段没有利用多列索引......
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2018-05-15
    • 2021-10-15
    • 2012-02-25
    相关资源
    最近更新 更多