查看索引使用情况
通过show status like 'Handler_%'查看索引的使用情况
执行show status like 'Handler_%' 查询结果如下:
Handler_commit | 2273182376 |
Handler_delete | 13147785 |
Handler_discover | 0 |
Handler_prepare | 929306702 |
Handler_read_first | 364523984 |
Handler_read_key | 4448663907 |
Handler_read_last | 3671319 |
Handler_read_next | 78418362615 |
Handler_read_prev | 7757665653 |
Handler_read_rnd | 703361165 |
Handler_read_rnd_next | 7.33716E+11 |
Handler_rollback | 509971551 |
Handler_savepoint | 0 |
Handler_savepoint_rollback | 0 |
Handler_update | 313811947 |
Handler_write | 3789035272 |
handler_read_key:根据索引读取行的请求数。如果该值很大,说明你的查询和表都建立了很好的索引,表明索引效率的很高 Handler_read_rnd_key:根据固定位置读取行的请求数。如果你执行很多需要排序的查询,该值会很高。你可能有很多需要完整表扫描的查询,或者你使用了不正确的索引用来多表查询。
Handler read rnd next:从数据文件中读取行的请求数。如果你在扫描很多表,该值会很大。通常情况下这意味着你的表没有做好索引,或者你的查询语句没有使用好索引字段。
查看某个表索引
show INDEX from user_device;
SHOW keys from user_device;
Non_unique: 如果索引中不包括重复的词,则为0,如果包括则为1。
Key_name: 索引名称
Seq_in_index: 索引中的列序列号,从1开始
Column_name: 列名称
Collation: 列以什么的存储方式存储在索引中,在Mysql中值A代表升序。
Cardinality :
An estimate of the number of unique values in the index. This is updated by running ANALYZE TABLE or myisamchk -a. Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables. The higher the cardinality, the greater the chance that MySQL uses the index when doing joins.
1. 列值代表的是此列中存储的唯一值的个数(如果此列为primary key 则值为记录的行数)
2. 列值只是个估计值,并不准确。
3. 列值不会自动更新,需要通过analyze table来进行更新。
4. 列值的大小影响join时是否选用这个index的判断。
5. 初建index时,MyISAM的表cardinality的值为null,InnoDB的表cardinality的值大概为行数。
6. MyISAM与InnoDB对于cardinality的计算方式不同。
Sub_part: 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
Packed: 指示关键字如何被压缩。如果没有被压缩,则为NULL。
Null: 如果该列中含有Null,则YES,如果没有则该列含有NO。
Index_type: 用过的索引方法(BTREE,FULLTEXT,HASH,RTREE)
comment: 备注
Index_comment: 索引备注
部分来自网络...