MySQL索引
索引的优势:
- 加快查询速度
- 创建唯一索引来保证数据表中数据的唯一性
- 实现数据的完整性,加速表和表之间的连接
- 减少分组的排序时间
增加索引不利的方面:
- 创建和维护索引要耗费时间,并且随着数据量而增加
- 索引需要占磁盘空间,除了数据表占数据空间之外,每个索引还要占一定的物理空间如果有大量的 索引,索引文件可能比数据文件更快达到最大文件尺寸。
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
普通索引(普通索引是最基础的索引类型,没有唯一性的限制,作用只是加快对面数据访问)
Alter table 表名 add index 索引名(列名) //index是索引的意思
Create index 索引名 on 表名(列);
查看创建的索引
show create table 表名\G
判断索引是否在被使用
explain select * from 表名where 条件\G //条件必须是索引的条件方可判断
唯一索引(减少查询索引列操作的执行时间,尤其是对比比较大的数据表,与普通索引不同:索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一)
Alter table 表名 add unique index 索引名(列名) //index是索引的意思,unique是唯一
Create unique index 索引名 on 表名(列名)
单列索引(是在数据表中的某一个字段上创建的索引,一个表中可以创建多个单列索引,单列索引和普通索引是几乎没有区别)
Alter table 表名 add index 索引名(列名) //index是索引的意思
Create index 索引名 on 表名(列名)
组合索引(是在多个字段上创建一个索引,遵循最左前缀原则,索引最左边的的列来匹配行)
Alter table 表名 add index 索引名(列1,列2,列3)
Create index 索引名 on 表名 (列1,列2)
全文索引(用于全文搜索,只支持char、varchar、text列)
Alter table 表名 fulltext index 索引名(列(限制,数字)) //fulltext全文
Create fulltext index 索引名 on 表名(列名)
空间索引(空间类型的字段必须为非空 字段的数字类型必须是geometry)
Alter table 表名 add 列 geometry //geometry是几何的意思
Alter table 表名 add spatial index 索引名(列) //spatial是空间的意思
Create spatial index 索引名 on 表名(列)
总结:在已经存在的表上创建索引:Alter table 表名 add [unique唯一索引|fulltext全文索引|spatial空间索引] [index|key] [默认索引名] (定义 索引名[length]) [asc|desc]
删除索引
Alter table 表名 drop index 索引名;
drop index 索引名 on 表名;