数据库索引基础知识问答
什么是索引?
与图书的索引类似,数据库索引就是一个指针,指向表里的数据,一般釆用某种高级树结构实现。
索引的作用?
提高检索速度。没有使用索引的查询会导致全表扫描,对每行记录相关的字段执行条件校验。
索引的缺点?
占据磁盘空间,运行时需要额外的维护开销,减缓批处理操作。
如何创建索引?
create (unique) index index_name on table_name(column1, ...)
如何删除索引?
drop index index_name on table_name
索引有哪些种类?
单字段索引:基于一个字段创建的索引。
组合索引:基于两个或多个字段创建的索引,最有限制性或者总是会指定的字段放在前面。
唯一索引:不允许重复值。
隐含索引:自动创建的索引,比如主键约束和唯一性约束;
聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同,一张表只能有一个聚集索引;
非聚集索引:表中行的物理顺序与索引顺序无关。
何时应该使用索引?
主键约束和唯一性约束会自动创建索引;
外键;
联表查询经常用到的字段;
经常在order by和group by引用的字段;
具有大量唯一值的字段;
在where子句会返回很少记录的字段。
何时不该使用索引?
小规模的表;
在where子句会返回大部分记录的字段;
经常被操作的字段;
包含大量null值的字段;
经常会被批量更新的表可以在执行批量操作之前删除索引,完成操作后再重建索引。
小结:
需要对表的关系、査询和事务需求,以及对数据本身有透彻的了解才能有效地使用索引。
编译、整理自:
【SQL入门经典(第5版)】
http://www.cnblogs.com/flashicp/archive/2007/05/08/739245.html1
http://foocoder.com/blog/tan-shu-ju-ku-suo-yin-he-sqlitezhong-suo-yin-de-shi-yong.html/
http://tech.meituan.com/mysql-index.html