删除索引的策略主要是两种

mysql中如何删除索引(怎么删除索引mysql语句)
1,未使用的索引加以删除
2,唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件,这类的索引要加以删除,解释一下:

mysql中如何删除索引(怎么删除索引mysql语句)
information_schema.statistics和information_schema.index_statistics
information_schema.statistics是索引定义表,主要字段有:
TABLE_CATALOG:包含索引的表所属的目录的名称。此值始终为def。
TABLE_SCHEMA:包含索引的表所属的架构(数据库)的名称。
TABLE_NAME:包含索引的表的名称。
NON_UNIQUE:如果索引不能包含重复项,则为0;如果可以,则为1。
INDEX_SCHEMA:索引所属的架构(数据库)的名称。
INDEX_NAME:索引名称。如果索引是主键,则名称始终为PRIMARY。
SEQ_IN_INDEX:索引中的列序号,从1开始。
COLUMN_NAME:列名。另请参见该EXPRESSION列的说明 。
COLLATION:列如何在索引中排序。它可以具有值 A(升序),D (降序)或NULL(未排序)。
CARDINALITY:索引中唯一值数量的估计。要更新此数字,请运行ANALYZE
TABLE或(对于MyISAM表) myisamchk
-a。CARDINALITY基于存储为整数的统计信息进行计数,因此即使对于小型表,该值也不一定精确。基数越高,MySQL在进行连接时使用索引的机会越大。这个字段后面分析索引唯一性的时候还会用上。
其他几个字段相对次要就不赘述了。
information_schema.index_statistics是使用信息表,主要字段有
TABLE_SCHEMA:包含索引的表所属的架构(数据库)的名称。
TABLE_NAME:包含索引的表的名称。
INDEX_NAME:索引名称。
ROWS_READ:通过索引读取的记录数。
information_schema.tables 表定于信息,主要字段有
TABLE_SCHEMA:包含索引的表所属的架构(数据库)的名称。
TABLE_NAME:包含索引的表的名称。
Table_type:表类型
Engine:使用的数据库引擎,MyISAM CSV InnoDB
Version:版本,默认值10
Row_format:行格式[Compact|Dynamic|Fixed]
Table_rows:表里所存多少行数据
Avg_row_length : 平均行长度
Data_length: 数据长度
Max_data_length :最大数据长度
Index_length : 索引长度
Data_free :空间碎片
Auto_increment 做自增主键的自动增量当前值
其他几个字段相对次要就不赘述了。
查找未使用索引的SQL如下
这个SQL就是找到索引定义但是没有索引使用数据的索引,这些索引还需要考虑这些索引未被使用的原因。原因可能是
这些索引的确是多余的,已经有更有效的索引可使用,所以这批索引可以安全删除。
这些索引对应的使用场景,在这段时间内并未出现?这类的索引应该配合查询SQL的调整。
下面这个sql主要是利用
information_schema.statistics的CARDINALITY(索引中唯一值数量的估计)和information_schema.tables的Table_rows(表里所存多少行数据)计算了比例。唯一性比例越高越好。
查询结果把唯一性比例低的排在前面。统计的结果要进行分析有些字段例如分表分库的sharding字段本来的区分度就不是很高,也无法调整。特别要留意那些枚举值,用这些值去做索引往往起不到作用,但也要具体分析,特定的枚举值出现的几率比较小,业务上对相应值查询又比较频繁的话可以保留。总之这类索引要结合SQL进行分析。
本文网址:https://www.shengjiangju.com/wlyx/488.html版权声明: 1.本站内容部分为潍坊晟匠聚网络编辑原创文章,部分来源于网络,如需转载,请标注来源网站名字和文章出处链接。 2.本站内容为传递信息使用,仅供参考,也不构成相关建议。 3.部分内容和图片来源于网络,如有侵权,请联系我们处理。


