检查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

项目主页:http://www.open-open.com/lib/view/home/1439259001864