繁体   English   中英

在MySQL中,如何构建索引来加速这个查询?

[英]In MySQL, how to build index to speed up this query?

在MySQL中,如何构建索引来加速这个查询?

SELECT c1, c2 FROM t WHERE c3='foobar';

要真正给出答案,看看你是否已有现有索引会很有用,但......

所有这一切都假设表't'存在并且您需要添加索引,并且您当前只有主键上的单个索引或根本没有索引。

查询的覆盖索引将为您的需求提供最佳性能,但是使用任何索引都会牺牲一些插入速度。 牺牲多少取决于您的应用程序的配置文件。 如果你从表中大部分时间阅读它并不重要。 如果您只有几个索引,即使适度的写入负载也无关紧要。 您桌子的有限存储空间也可能发挥作用......您需要对权衡做出最终评估,如果它是明显的。 好消息是它不断受到打击。 通常,添加索引不会以指数方式减慢插入,只是线性地减慢。

无论如何,以下是您选择最佳性能的选择:

  1. 如果c3是表t的主键,则无法在查询中做任何更好的事情,以使索引更快。
  2. 假设c1是你的主键t:

     ALTER TABLE t ADD INDEX covering_index (c3,c2); 
  3. 如果c1不是你的pk(也不是c2),请使用:

     ALTER TABLE t ADD INDEX covering_index (c3,c2,c1); 
  4. 如果c2是你的PK,请使用:

     ALTER TABLE t ADD INDEX covering_index (c3,c1); 
  5. 如果磁盘上的空间或插入速度是一个问题,您可以选择执行点索引。 你会牺牲一些性能,但如果你插入很重,它可能是正确的选择:

     ALTER TABLE t ADD INDEX a_point_index (c3); 

在您搜索的列上构建索引,因此在这种情况下,您必须在字段c3上添加索引:

CREATE INDEX c3_index ON t(c3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM