【问题标题】:Using an index with multiple OR statements使用具有多个 OR 语句的索引
【发布时间】:2014-04-24 08:02:06
【问题描述】:

我试图让这个查询使用索引。

explain SELECT SQL_NO_CACHE * FROM products WHERE (stock_disabled = 1 OR negative_stock_allowed = 1 OR stock > 0)

这是它返回的内容:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  p   ALL     multi_index     NULL    NULL    NULL    2890    Using where

multi_index 是以相同顺序包含 stock_disabled、negative_stock_allowed 和 stock 的。我认为索引不起作用,因为有多个 OR 语句。我可以在这里做什么?

【问题讨论】:

  • 您是否尝试过创建 3 个单独的索引?每列一个,然后运行解释?
  • MySQL 每次查询只能使用一个索引,所以对我没有任何好处。
  • 只需检查单个条件 stock_disabled=1 并分享索引是否在此处使用...
  • OR 即使有索引也是一个基勒,因此您可以使用 UNION 分别拥有每个条件

标签: mysql optimization indexing multiple-columns


【解决方案1】:

"USE INDEX foo" 如果你明确想要使用索引

SELECT * FROM products USE INDEX(`multi_index`)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2019-10-12
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多