【问题标题】:How to make the best use of indexes in mysql?如何充分利用mysql中的索引?
【发布时间】:2019-02-24 09:19:27
【问题描述】:

我必须从包含大约 100 万个条目的表中选择值。 我的哪个查询会更有效?

查询 1:

select * from table1 
where indexedcolumn1 < value1 
and unindexedcolumn1 < value 2 
and indexedcolumn2 < value2;

查询 2:

select * from table1 
where indexedcolumn1 < value1 
and indexedcolumn2 < value2 
and unindexedcolumn1 < value 2;

如何充分利用索引?

【问题讨论】:

  • 我们无法回答这个问题,因为我们不知道您的数据,也看不到解释计划。您应该将这些内容添加到您的问题中。
  • 查看您的代码,这两个查询是相同的,where 子句中位置的变化不应该改变性能..但是您应该展示一个真实的案例..
  • 因为在WHERE 子句中出现了一个(或多个)未索引的列,MySQL 很可能会选择根本不使用任何索引。您可以通过描述您要运行的实际查询来重新表述您的问题,然后寻求帮助以优化它。
  • use-the-index-luke.com 应该是必读的。

标签: mysql performance indexing query-optimization


【解决方案1】:

索引 3 列中的每一列。优化器将根据统计数据选择最佳索引。它可能仍然使用错误的索引,但它是当前可用的最佳索引。

【讨论】:

    【解决方案2】:
    1. WHERE 子句中的条件序列(列)没有任何意义,因为 mySQL 查询优化器没有考虑到它。所以(如上所述)您的查询是相同的。
    2. 使用 EXPLAIN(例如:explain select * from ....)命令找出服务器执行查询的方式。在 google 上的官方文档中阅读更多关于解释 EXPLAIN 输出的信息(那里有很多关于 EXPLAIN 的好文章)。
    3. 尝试为未编制索引的列建立索引,因为这是提高查询性能的最佳(而且我猜是唯一的)方法。一个未索引的列通常会破坏所有其他努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2018-03-20
      相关资源
      最近更新 更多