网站首页 > 文章中心 > 其它

mysql怎么查重复索引

作者:小编 更新时间:2023-10-04 12:02:06 浏览量:432人看过

如何检查mysql的重复索引

在一个生产库上,没有创建索引,是不可思议的,当然你的索引创建的太多了、冗余了,更是不可思议的.恰当的索引能够提高你的数据库性能,反之则提高维护成本,下面就介绍一款工具,来分析你的mysql库的索引是不是有冗余,pt-duplicate-key-checker,它能从mysql表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来,并生成删除重复索引的语句,非常方便.工具详细介绍请参考

官文:

直接上实例:

#

########################################################################

nigel.a1

#?dx_cd?is?a?left-prefix?of?dx_cd_b

#?Key?definitions:

#?KEY?◆dx_cd◆?(◆cd◆)

#?KEY?◆dx_cd_b◆

(◆cd◆,◆b◆),

#?Column?types:

◆b◆?varchar(100)?default?null

#?To?remove?this?duplicate?index,?execute:

ALTER?TABLE?◆nigel◆.◆a1◆?DROP?INDEX?◆dx_cd◆;

nigel.students

#?dx_n?is?a?left-prefix?of?dx_n_s

#?KEY?◆dx_n◆?(◆name◆),

#?KEY?◆dx_n_s◆

(◆name◆,◆score◆),

ALTER?TABLE?◆nigel◆.◆students◆?DROP?INDEX?◆dx_n◆;

#?Summary?of

indexes

#?Size?Duplicate?Indexes

#?Total

Indexes

mysql--索引优化

索引覆盖是指如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为"索引覆盖"

索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多).所以呢对于一些长短不同的字节,我们会针对列中的值,从左往右截取部分,来建索引.但是:

①.:截的越短, 重复度越高,区分度越小, 索引效果越不好

所以,我们要在 ?区分度 ◆ 长度 ?两者上,取得一个平衡( distinct?去重 )

对于一般的系统应用区别度能达到 0.1 ,索引的性能就可以接受.

给字符串类型的字段建立索引效率不高,但是必须要经常查这个字段怎么建索引?

分析:优化思路是 不查,少查,查索引,少取.

我们现在必须要查,则只查索引,不查数据,得到id.

再用id去查具体条目. ?这种技巧就是延迟索引.

①.:对于覆盖索引,直接在索引上查询时,就是有顺序的, using index

我们的争取目标:取出来的数据本身就是有序的! 利用索引来排序,那么什么时候发生索引排序呢?即查询索引和order by的字段是同一个字段

?goods表中 cat_id与shop_price组成联合索引:

using where按照shop_price索引取出的结果,本身就是有序的

? ? ? ??select goods_id,cat_id,shop_price from goods order by click_count;

? ? ? ? ? ? using filesort用到了文件排序,即取出的结果再次排序

重复索引是指 在同1个列(如age), 或者顺序相同的几个列(age,school), 建立了多个索引,称为重复索引,重复索引没有任何帮助,只会增大索引文件,拖慢更新速度.

mysql怎么看索引状态

SHOW INDEX FROM tbl_name [FROM db_name]

例如,

mysql SHOW INDEX FROM mytable FROM mydb;

mysql SHOW INDEX FROM mydb.mytable;

SHOW KEYS是SHOW INDEX的同义词.您也可以使用mysqlshow -k db_name tbl_name命令列举一个表的索引.

SHOW INNODB STATUS语法

SHOW INNODB STATUS

SHOW INDEX会返回表索引信息.其格式与ODBC中的SQLStatistics调用相似.

SHOW INDEX会返回以下字段:

- Table

表的名称.

- Non_unique

如果索引不能包括重复词,则为0.如果可以,则为1.

- Key_name

索引的名称.

- Seq_in_index

索引中的列序列号,从1开始.

- Column_name

列名称.

- Collation

列以什么方式存储在索引中.在MySQL中,有值'A'(升序)或NULL(无分类).

- Cardinality

索引中唯一值的数目的估计值.通过运行ANALYZE TABLE或myisamchk -a可以更新.基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的.基数越大,当进行联合时,MySQL使用该索引的机会就越大.

- Sub_part

如果列只是被部分地编入索引,则为被编入索引的字符的数目.如果整列被编入索引,则为NULL.

- Packed

指示关键字如何被压缩.如果没有被压缩,则为NULL.

- Null

如果列含有NULL,则含有YES.如果没有,则该列含有NO.

- Index_type

用过的索引方法(BTREE, FULLTEXT, HASH, RTREE).

- Comment

多种评注.

以上就是土嘎嘎小编为大家整理的mysql怎么查重复索引相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章