【问题标题】:How to optimize searching in a MySQL table when using OR?使用 OR 时如何优化 MySQL 表中的搜索?
【发布时间】:2016-09-06 22:45:30
【问题描述】:

我最近了解到,我可以使用以下带有 OR 的 select 语句在 MySQL 表中搜索多个列:

SELECT * data WHERE TEMP = "3000" OR X ="3000" OR Y="3000";

它返回所需的结果,但在只有约 260k 行的表中返回结果确实需要大约 1.7 秒。我还为每个搜索的列添加了索引。

有没有办法优化这个查询?还是有另一种更快但返回相同结果的方法?

【问题讨论】:

    标签: mysql search search-engine


    【解决方案1】:

    另一种选择是使用 UNION...

    SELECT * FROM data WHERE TEMP = "3000"
    UNION
    SELECT * FROM data WHERE X ="3000"
    UNION
    SELECT * FROM data WHERE Y="3000";
    

    ...然而,提高性能的真正关键首先是索引,其次是查询分析器。通常数据会确定哪个更快,因为 TEMP 可能比 Y 为“3000”的可能性小一百倍 - 例如,这应该是您原始 OR 语句中的第一个。

    【讨论】:

    • 嗯,我收到语法错误near data where TEMP ="3000"。但我明白你对查询结构的看法。对于此查询,TEMP 列可能会返回 3000 的结果。编辑:请在答案中添加 from。结果是 0.05 秒。我相信这可能是我能得到的最好的。
    • @AhmedAl-haddad 对此感到抱歉 - 它未经测试,我错过了 FROM 关键字!
    • 我想验证一下,如果我将查询从TEMP=3000 更改为TEMP>3000TEMP<3000,则需要大量时间(10s~)才能得到结果。我该如何反击? (返回结果超过200K行)
    • 或者,你能告诉我在哪里可以阅读更多关于这方面的信息,以了解每种需求的适当查询是什么?似乎每当我更改某些值时,我的速度都会显着不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多