检查mysql数据库中重复和冗余的索引:MysqlDoubleIndex
jopen
9年前
TODO: 检查mysql数据库中重复和冗余的索引
Doc
冗余和重复索引的概念:
MySQL允许在相同列上创建多个索引,无论是有意的还是无意的。MySQL需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能。
重复索引:是指在相同的列上按照相同的顺序创建的相同类型的索引。应该避免这样创建重复索引,发现后也应该立即移除。
冗余索引:冗余索引和重复索引有一些不同,如果创建了索引(A,B),再创建索引(A)就是冗余索引,因为这只是前一个索引的前缀索引。因此索引 (A,B)也可以当索引(A)来使用(这种冗余只是对B-Tree索引来说)。冗余索引通常发生在为表添加新索引的时候。例如,有人可能会增加一个新的索引(A,B)而不是扩展已有的索引(A)。还有一种情况是将一个索引扩展为(A,ID),其中ID是主键,对于InnoDB来说主键列已经包含在二级索引中了,索引也是冗余的。
大多数的情况下都不需要冗余索引,应该尽量扩展已有的索引而不是创建新索引。但也有时候出于性能方面的考虑需要冗余索引,因为扩展已有的索引会导致其变得太大,从而影响其它使用该索引的查询的性能。
Installation
Add this line to your application's Gemfile:
gem 'mysql_double_index'
And then execute:
$ bundle
Or install it yourself as:
$ gem install mysql_double_index
Usage
And then execute:
$ rails c #查询单个表重复&冗余索引 $ > MysqlDoubleIndex.db_double_index("articles") #查询所有表重复&冗余索引 $ > MysqlDoubleIndex.db_double_index #查询单个表磁盘占用大小 $ > MysqlDoubleIndex.db_table_size("articles") #查询所有表磁盘占用大小 $ > MysqlDoubleIndex.db_table_size