【问题标题】:Should i use index when using where clause in mysql?在mysql中使用where子句时我应该使用索引吗?
【发布时间】:2011-11-25 07:45:38
【问题描述】:

我有一个存储大约 50k 行的表,这是我的查询:

select * from video where status = 1 and filter = 1 and category = 4

这些列是 tinyint,我想知道我应该在这些列上做索引吗?

【问题讨论】:

    标签: mysql indexing where-clause


    【解决方案1】:

    不!

    您应该始终考虑索引选择性!如果索引上的 where 子句的结果将返回超过 20% 的表,则该索引未被使用,但它被保留。

    因此,例如,您的视频状态将为 1、2、3,那么您就有 3 种可能的状态。如果这些指数分布良好,我们可以认为这将是其中的 33.3%。然后,查询:

    select * from video where status = 1
    

    不会使用该索引!相反,将使用 FULL TABLE SCAN。

    请阅读。这真的很重要,也是一个常见的错误。

    Google search

    【讨论】:

      【解决方案2】:

      如果您为此查询创建索引,请尝试(status, filter, category)(顺序可能不同)。

      但这取决于你的表格行中有多少百分比有(status, filter, category) = (1,1,4)。百分比越小,使用索引运行的查询就越好。正如 santiagobasulto 所指出的,如果索引选择性不高,则无论如何都不会将索引用于查询,但会运行表的完整扫描。

      【讨论】:

        【解决方案3】:

        我肯定会使用索引。他们使选择更快。但是如果表中有很多插入,那么我会再想一想。插入语句上的索引会增加很多重载,并且您的插入语句会很慢,因为每次插入时它都必须重新构建索引。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-16
          • 1970-01-01
          • 2013-11-17
          • 1970-01-01
          • 1970-01-01
          • 2012-05-18
          • 2012-06-11
          • 2010-10-09
          相关资源
          最近更新 更多