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

时间:2012-10-24 14:24:54

标签: mysql indexing database-performance

在MySQL中,如何构建索引以加速此查询?

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

2 个答案:

答案 0 :(得分:10)

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

所有这一切都假设表'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. 如果你的PK是c2,请使用:

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

    ALTER TABLE t ADD INDEX a_point_index (c3);  
    

答案 1 :(得分:6)

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

CREATE INDEX c3_index ON t(c3)