MySQL中冗余和重复索引的详细解释
重复索引是在同一列上以相同顺序创建的相同类型的索引,因此我们应该避免创建重复索引并发现它应该立即删除。
创建表测试(
id不是空主键,
int不是空的,
b不是空的,
唯一(id),
索引(id),
InnoDB引擎=);
SQL的这一部分创建了3个重复的索引,通常没有理由这样做。
冗余索引和重复的索引是不同的,如果你创建的索引(A,B),然后创建索引(一)指标是多余的,因为这仅仅是一个前缀索引的前面,所以(A,B)也可以使用(A)(B,A),但它不是冗余指标,指标(B)是没有的,因为B不是一个指数(A,B)除左栏前缀,在相同的列创建其他类型的指标(如哈希索引和全文索引)索引B树索引是不是多余的,不管覆盖索引列是什么。
当一个新索引添加到表中时,通常会出现一个冗余索引。例如,某人可能添加一个新索引(A,B)而不是一个扩展索引(a)。另一个例子是将索引扩展到(a,id),id是主键。InnoDB,主键已包括在二级指标,所以这也是多余的。
在大多数情况下不需要多余的指标,应尽量扩大现有的索引而不是创建一个新的指标,但有时在性能方面的考虑需要冗余的指标,因为现有的索引的扩展会使它变得太大,从而影响其他使用索引的查询的性能。如:如果整数列有一个索引,现在需要延长指数增加了一个额外的长VARCHAR列,然后可能会急剧下降,特别是查询索引为覆盖指数,或是MyISAM,有很多的范围查询(由于MyISAM前缀压缩)
例如,有一个用户信息表,这个表有1000000个数据,并20000记录每一个state_id价值。有state_id索引,那么以下SQL称为Q1
select count(*)从用户信息,state_id = 5;——Q1
修改后的查询执行的速度大约是每秒115次(QPS)
还有一个SQL,我们称之为Q2
选择state_id,城市,从用户信息,state_id = 5地址;——Q2
这个查询的QPS是10。为了提高索引性能的最简单的方法就是野生的指数(state_id、城市、地址),它允许索引覆盖查询:
警报相关表添加关键state_id_2(state_id,城市,地址);
注:state_id已编入索引,根据以往的概念,这是一个多余的指标,不重复的索引)。
如何查找冗余索引和重复索引
1,你可以使用一些在Shlomi noach common_schema尝试定位,common_schema是一系列常用的存储和尝试,可以在服务器上安装。
2。你可以使用pt_duplicate-key-checker Percona工具包,它识别冗余的分析表结构重复指标。
总结
以上是MySQL中的冗余和重复的索引的全部内容,希望对你有所帮助,感兴趣的朋友可以看看:MySQL中的几个重要变量,Redis和MySQL,MySQL的子查询和嵌套查询优化之间的差异分析,如不足,欢迎留言指出,特雷西会及时回复大家和修改,感谢朋友们的支持这个网站!