qaz*_*wsx 6 mysql indexing database-performance
在MySQL中,如何构建索引来加速这个查询?
SELECT c1, c2 FROM t WHERE c3='foobar';
Run Code Online (Sandbox Code Playgroud)
Ray*_*Ray 10
要真正给出答案,看看你是否已有现有索引会很有用,但......
所有这一切都假设表't'存在并且您需要添加索引,并且您当前只有主键上的单个索引或根本没有索引.
查询的覆盖索引将为您的需求提供最佳性能,但是使用任何索引都会牺牲一些插入速度.牺牲多少取决于您的应用程序的配置文件.如果你从表中大部分时间阅读它并不重要.如果您只有几个索引,即使适度的写入负载也无关紧要.您桌子的有限存储空间也可能发挥作用......您需要对权衡做出最终评估,如果它是明显的.好消息是它不断受到打击.通常,添加索引不会以指数方式减慢插入,只是线性地减慢.
无论如何,以下是您选择最佳性能的选择:
假设c1是你的主键t:
ALTER TABLE t ADD INDEX covering_index (c3,c2);
Run Code Online (Sandbox Code Playgroud)如果c1不是你的pk(也不是c2),请使用:
ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);
Run Code Online (Sandbox Code Playgroud)如果c2是你的PK,请使用:
ALTER TABLE t ADD INDEX covering_index (c3,c1);
Run Code Online (Sandbox Code Playgroud)如果磁盘上的空间或插入速度是一个问题,您可以选择执行点索引.你会牺牲一些性能,但如果你插入重量,它可能是正确的选择:
ALTER TABLE t ADD INDEX a_point_index (c3);
Run Code Online (Sandbox Code Playgroud)在您搜索的列上构建索引,因此在这种情况下,您必须在字段上添加索引c3:
CREATE INDEX c3_index ON t(c3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13542 次 |
| 最近记录: |