索引综述
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引其实和字典的目录很相似,字典可以根据拼音和部首偏旁快速查询到指定的字。
对于MySQL数据库来说,索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。
索引的分类
索引的种类不止一种,它包括:主键、唯一索引、普通索引、全文索引、组合索引
①、主键:根据主键建立索引,不允许重复,不允许空值,一个表可以没有主键,但最多只能有一个主键,主键可以为空字符串
先创建一个表:indextest2
创建主键:
alter table indextest2 add primary key (name);
查看创建的主键:
向表里面插入数据,查看查询的时候是否使用了主键:
可以看到确实是用了主键。
不允许重复的解释如下图:
②、唯一索引:用来建立索引的列的值必须是唯一的,允许空值
首先删除indextest2表的主键:alter table indextest2 drop primary key;
然后创建唯一索引:
alter table indextest2 add unique (name);
通过上图可以得知唯一索引创建成功。
③、普通索引:用表中的普通列构建的索引,没有任何限制
④、全文索引:用大文本对象的列构建的索引
创建全文索引:
alter table indextest2 add fulltext index (name);
⑤、组合索引:用多个列组合构建的索引,这多个列中的值不允许有空值
alter table indextest2 add idnex (name,age,score);
组合索引遵循最左原则,先看下图:
查询操作并未使用索引,做如下解释:
所谓最左原则:是把最常用作为检索或排序的列放在最左,依次递减,组合索引相当于建立了col1,col1col2,col1col2col3三个索引,而col2或者col3是不能使用索引的。
在使用组合索引的时候可能因为列名长度过长而导致索引的key太大,导致效率降低,在允许的情况下,可以只取col1和col2的前几个字符作为索引
ALTER TABLE ‘table_name’ ADD INDEX index_name(col1(4),col2(3));
表示使用col1的前4个字符和col2的前3个字符作为索引