数据库 索引的使用
——在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
- 优点:可以快速检索查询,减少IO次数;根据索引排序和分组,可以加快排序和分组
- 缺点:索引本身也是物理表,会占用存储空间,索引表的创建和维护需要一定消耗,这个成本随数据量增大而增加;由于对数据的修改(删除,添加,修改)会修改索引,从而造成效率的降低
——索引的分类
普通索引:用表中普通的列构建的索引,没有限制
Alter table 'table_name' add index index_nam('col');
主键索引:即主索引,根据主键建立索引,不允许重复,空值
Alter table 'table_name' add primary key('col');
唯一索引:用于建立索引的列是唯一的,允许空值
Alter table 'table_name' add unique('col');
全文索引:用大文本对象的列构建的索引
Alter table 'table_name' add fulltext('col');
组合索引:用多个列的组合构建的索引,不允许空值
Alter table 'table_name' add index_name('col1','col2','col3');
(组合索引最左原则,即相当于建立了 col1 col1col2 col1col2col3 三个索引)
——聚簇索引与非聚簇索引
聚簇索引中索引的顺序与数据库中数据项的顺序一致,而非聚簇索引索引的顺序与数据项的顺序不一致
——索引的使用技巧
- 主键自动建立唯一索引
- 经常作为查询条件即Where或Order By语句中出现的列建立索引
- 作为排序的列要建立索引
- 查询中关联到其它表字段,外键关系建立索引
- 经常增删改的列不建索引
- 大量重复的列不建索引
- 记录太少的不建索引
——索引特点
- 在组合索引中,一旦有列为NULL 那么该组合索引无效
- 在一个select语句中,索引只能使用一次
- LIKE通配符查询,'%str%'不会使用索引 'str%'可以使用索引(前缀原理)
- 查询条件使用<>导致索引失效
- 建议不要包含多列排序,或为这些列建立组合索引