mysql怎么看索引字段 mysql如何查看索引

mysql 怎么看查询使用的索引假如mysql怎么看索引字段你有一个表mysql怎么看索引字段,
SQL CREATE TABLE test_tab (2 id INT,
3 name VARCHAR(10),
4 age INT,
5 val VARCHAR(10)6 );你的业务,有一个查询,是
SELECT * FROM test_tab WHERE name = 一个外部输入的数据
刚开始,数据不多的时候,执行效果还不错 。
随着数据量的增加,这个查询,执行起来,越来越慢了 。
然后在 name 上面 建立了索引
CREATE INDEX idx_test4_name ON test_tab (name );
这样 ,  可以加快前面那个查询的速度 。
但是,某天,你执行了下面这个SQL, 发现速度又慢了
SELECT * FROM test_tab WHERE age = 25
为啥呢mysql怎么看索引字段? 因为 age 字段上面,没有索引
索引只在 name 上面有
换句话说,也就是 WHERE 里面的条件,会自动判断 , 有没有 可用的索引 , 如果有 ,  该不该用 。
多列索引 , 就是一个索引,包含了2个字段 。
例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '张%'
AND age = 25
这样的查询,将能够使用上面的索引 。
多列索引,还有一个可用的情况就是,某些情况下,可能查询,只访问索引就足够了,不需要再访问表了 。例如:SELECTAVG( avg ) AS 平均年龄FROMtest_tabWHEREname LIKE '张%'
这个时候,name 与 age 都包含在索引里面 。查询不需要去检索表中的数据 。
如何查看MySQL索引查看索引
mysql show index from tblname;
mysql show keys from tblname;
· 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索引类型 MySQL目前主要的索引类型有下面几种:
与前面的普通索引类似,但是他的索引列的值必须是唯一的,所以叫唯一索引,但是这个索引字段如果是空值是可以的,具体创建方式如下:
主键索引是一种特殊的索引,一个表只能有一个主键,不允许有空值,一般是创建表的时候创建主键索引,而且一般习惯设置成自增的,因为对弈MySQL的底层B+树存储起来很方便
组合索引指多个字段上创建的索引,只有在查询时候,查询条件中使用了创建索引时的第一个字段,索引才会生效,他使用遵循最左前缀原则.
索引生效情况:
select* fromtable where name=1;
select* fromtable where name=1 and city=2;
select* fromtable where name=1 and city=2 and age=3;
索引不生效情况:
select* fromtable where name=1 and age=3;
select* fromtable wherecity=2 and age=3;
select* fromtable whereage=3;
select* fromtable wherecity=2;
这个遵循的是最左原则,具体MySQL底层对联合索引的存储以及为什么是最左原则,参考本人另外一篇文章最后一段就能看明白

推荐阅读