数据库索引
索引是一种数据结构,是帮助数据库高效获取数据的数据结构 (在数据之外,数据库系统还满足着特定查找算法的数据结构,这些数据以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这些数据结构就叫索引)
索引的优势有哪些
- 数据库IO的次数: 提高数据索引的效率,降低数据库IO的成本
- 索引排序:通过索引列对数据可进行排序,降低排序成本,降低了CPU的消耗
索引的缺点有哪些
- 内存空间: 因为索引也是一张表,该表保存了主键与索字段,并指向实体表的记录,所以索引也是要占用空间的
- 表的更新速度: 虽然索引大大提高了查询速度,但同时还会降低更新表的速度,如对表进行INSERT、UPDATE和 DELETE,
因为更新表时,(mysql为例)MySQL不仅要保存数据,还要保存一下索引文件,而每次更新添加了新的字段都会调整,因为更新所带来的键值变化后的索引信息增加
索引只是提高效率的一个因素,如果MySQL有大量数据的表,就需要花时间好好研究建立一个更优秀的索引,或优化查询
基本语法:
创建:
CREATE [UNIQUE] INDEX indexName ON mytable{(columnname(length))}
ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(length))
删除:
DROP INDEX[indexName] ON mytable
查看:
SHOW INDEX FROM table_name
使用ALTER命令 **
有四种方式来添加数据表的索引:
ALTER TABLE tbl_name ADD PRIMART KEY(column_list);
语句中添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
ALTER TABLE tbl_name ADD UNIQUE index_name(column_list);
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)
ALTER TABLE tbl_name ADD INDEX index_name(column_list);
添加普通索引,索引值可出现多次
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list);
该语句指定索引为FULLTEXT,全局索引
哪些情况需要创建索引 **
-
主键自动自动建立唯一索引
-
频繁作为条件的字段应该创建索引
-
查询中与其他表关联的字段,外键关系建立索引
-
单键/组合索引的选择问题,Why? (高并发下倾向建立组合索引)
-
查询中排序的字段(排序字段若通过索引去访问将大大提高排序速度)
-
查询中统计或者分组字段
-
频繁更新的字段不适合创建索引(因为每次更新不单单是更新了记录,还会更新索引)
-
WHERE 条件里用不到的字段不创建索引
哪些情况下不创建索引
-
表记录太少
-
经常增删改的表: why? :提高了查询速度,同时降低更新标的速度,进行 INSERT,UPDATE,DELETE更新表时,既要更新保存数据,又要更新索引
-
注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果