一、MySQL索引介绍
索引是一种数据结构,以其特有的记录数据的方式,为用户提供高性能的查询。索引就像是一本新华字典的目录,通过目录可以快速的找到我们想要找到的数据。
二、MySQL主要使用的索引
<代码>普通索引:MySQL中基本索引类型,仅有加速查询功能,允许在定义索引的列中插入重复的值和空值。 主键索引:有两个功能:加速查询和唯一约束(不可含零) 唯一索引:有两个功能:加速查询和唯一约束(可含零) 组合索引:组合索引是将n个列组合成一个索引代码>
三、普通索引
1,创建索引
<代码> part1:创建表时创建索引 创建表的用户( nid int not null auto_increment主键, 名字varchar(50)非空, passwd varchar(100)非空, 额外的文本, 索引idx1(名字) )! [](https://s1.51cto.com/images/blog/201809/14/39334e56fbb24560becb2c8a0ae9cc98.png?x-oss-process=image/watermark, size_16, text_QDUxQ1RP5Y2a5a6i、color_FFFFFF t_100, g_se, x_10, y_10, shadow_90, type_ZmFuZ3poZW5naGVpdGk=) 代码>
注意:如果是CHAR、VARCHAR类型,长度可以小于字段实际长度,如果是BLOB和文本类型,必须指定长度。
<代码>第二部分:创建索引 创建索引idx2 alt=" MySQL -索引">八,执行计划
解释用于显示SQL执行信息参数,根据参考信息可以进行SQL优化
<代码> mysql>解释select * from t1; + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | | id select_type | | | |表分区类型possible_keys关键| | key_len | ref额外过滤| | | |行 + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | 1 |简单t1 | |零|所有零零零零| | | | | | 2 | 100.00 | NULL + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1行集,警告(0.01秒)代码>解释列的解释:
select_type:查询类型
表:正在访问的表名
类型:连接类型、性能:& lt;指数& lt;范围& lt;index_merge & lt;ref_or_null & lt;ref & lt;eq_ref & lt;系统/const
possible_keys:显示可能应用在这张表中的索引,也可以是语在句后合适的语句
关键:实际使用的索引
key_len:实际使用的索引的字节长度
行:为了找到所需的内容预估要读取的行数
额外:描述信息如下使用指数
:要查询的列数据仅使用索引中的信息,而没有读取数据表中的信息使用临时
: mysql需要创建一个临时表来存储结果,这通常发生在对不同的列集进行顺序上,而不是组上,这种情况下,需要优化查询
使用filesort:这意味着mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行.mysql有两种文件排序算法,这两种排序方式都可以在内存或者磁盘上完成,不解释会告诉你mysql将使用哪一种文件排序,也不会告诉你排序会在内存里还是磁盘上完成。
范围检查每条记录(指数映射:#):没有找到合适的索引,因此对从前面表中来的每一个行组合,#是显示在possible_keys列中索引的位图,并且是冗余的。更多详细信息参见:MySQL官方文档
MySQL -索引