【问题标题】:MySQL - 'Using index condition' vs 'Using where; Using index'MySQL - '使用索引条件'与'使用 where;使用索引'
【发布时间】:2015-04-29 20:10:45
【问题描述】:

我想知道Using index conditionUsing where; Using index 之间的区别。 我认为这两种方法都使用索引来获取第一个结果记录集,并使用 WHERE 条件进行过滤。

第一季度。有什么区别?

第二季度。哪个更好?

谢谢。

【问题讨论】:

  • 使用索引是指您的 where 条件被索引列覆盖并且可能不需要扫描整个表。使用索引条件是当 where 条件包含索引列和非索引列时,优化器将首先解析索引列并在表中查找其他条件的行。第二种方法称为索引下推。但是当然查询所有覆盖索引更好。
  • @AbhikChakraborty 然后'在哪里使用;'在'使用哪里;使用索引意味着条件覆盖索引列而不扫描表?
  • 是的,使用索引意味着不扫描整个表。使用 where 仍然可以对非索引列进行表扫描,但如果在 where 条件中有任何索引列,它将使用它,这更像是使用索引条件。
  • @AbhikChakraborty 谢谢。

标签: mysql performance indexing


【解决方案1】:

使用索引条件 : where 条件包含索引列和非索引列,优化器将首先解析索引列,并为其他条件查找表中的行(索引下推)

使用 where;使用索引:“使用索引”意味着不扫描整个表。 'Using where' 仍然可以对非索引列进行表扫描,但如果在 where 条件中有任何索引列,它将使用它更像是使用索引条件

哪个更好? '使用哪里;如果查询的索引全部覆盖,则使用索引会比使用索引条件更好。

【讨论】:

  • “索引条件下推”是否支持update statement?从源码看,并没有断定更新可以使用索引条件下推。
【解决方案2】:

如果您观看此链接:https://dev.mysql.com/doc/refman/5.7/en/index-extensions.html

它解释了当'Column Extra'说'Using Index Condition'时,where条件中的所有列都使用索引。如果有任何列超出索引,则 Column Extra 说使用 Where,使用索引(在这种情况下,Mysql 需要在数据行中查找以应用 where 子句)。最好“使用索引条件”。

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多