索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。
表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。
如果一个表有1000行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。
所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。字符串是自动地压缩前缀和结尾空间。
索引用于:
快速找出匹配一个WHERE子句的行;
当执行联结时,从其他表检索行;
对特定的索引列找出MAX()或MIN()值;
如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。
如果所有键值部分跟随DESC,键以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。
如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。
MySQL Key值(PRI, UNI, MUL)的含义:
PRI主键约束;
UNI唯一约束;
MUL可以重复。
注:若是普通的key或者普通的index(实际上,普通的key与普通的index同义)。
区别:
一.主键:为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。
二,相同点:Unique key与primarykey 约束都强调唯一性。
三, 不同点:
1.一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY ;
2.unique key 约束只针对非主键列,允许有空值。Primary key 约束针对主键列,不允许有空值。
primary key = unique + not null
UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的。
注意:
1.key的用途:主要是用来加快查询速度的。
2.根据索引的原理,全NULL值不被记录在索引上
3.UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的。