Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引)
一、建立的方法介绍
1、PRIMARY KEY(主键索引) 的建立方法
ALTER TABLE 表明 ADD PRIMARY KEY ( 列名);
一般都是在建立表的时候自己就设置好了 自增长不为空的主键默认id
2、UNIQUE(唯一索引) 的建立方法
ALTER TABLE 表明 ADD UNIQUE (列名);
3、INDEX(普通索引) 的建立方法
ALTER TABLE 表明 ADD INDEX 索引名 ( 列名 ) //使用时候直接把文字替换为你的表名和列名就好
4、FULLTEXT(全文索引) 的建立方法
ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
5、组合索引 的建立方法 和 (联合索引,多列索引)都是一个意思
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
//==============================================================
二、各索引的使用方法
1、【主键索引】就不介绍了 都知道 具有唯一性和自增长性,查询效率最快
2、【唯一索引】 与 "普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。 如果想限制用户添加数据时候防止重复添加就可以 将 判断的字段设置为唯一索引来达到目的。
3、【普通索引】在查询中经常出现,特别百万级别或千万级别的数据量,使用普通索引会有特别显著的效果
比如:单个where 条件的字段查询 就可以将条件字段设置为普通索引来提高查询效率。
SELECT*FRO 表明 WHREE username="username";
4、【组合索引】经常在多个where条件的查询语句中出现。
SELECT*FROM 表明 WHREE username="username" AND password="password"
那么username和password就可以设置为两列的组合索引,组合索引遵循”最左前缀“原则。索引列顺序和查询列同步效果才能体现,不要觉得谁在前谁在后无所谓,为了好的编程习惯和兼容还是同步顺序的好。
加深组合索引的使用方法:
我们限制建立三列组合索引且顺序是:ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
那么我们查询语句中能够让组合索引起效果的查询方法是:
正确方法如下:
<1> SELECT*FROM `table_name` WHREE column1="column1" AND column2="column2" AND column3="column3";
<2> SELECT*FROM `table_name` WHREE column1="column1" AND column2="column2"
<3> SELECT*FROM `table_name` WHREE column1="column1"
错误如下:
<1> SELECT*FROM `table_name` WHREE column2="column2" AND column3="column3" and column1="column1";
<2> SELECT*FROM `table_name` WHREE column2="column2" AND column3="column3"
<3> SELECT*FROM `table_name` WHREE column2="column2" 或 SELECT*FROM `table_name` WHREE column3="column3" 都是错误的索引调用方式,且组合索引不会起效果,也就是说没有起到优化的作用。
在这个时候我们就可以多建立一个普通索引或组合索引来配合多条件的查询语句。
SELECT*FROM table_name WHERE 字段 like '关键词%'
会使用索引,而
SELECT * FROM table_name WHERE 字段 like '%关键词' 不会使用索引
三、索引的不足之处
上面说了那么多索引的好话,它真的有像传说中那么优秀么?当然会有缺点了。
1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件
2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。
网友评论