关于数据库优化的那点事
数据库优化应从三方面来考虑:数据库储存分区、表索引、SQL语句优化
今天这篇博客主要是介绍表索引:
是否创建索引的原则:
创建索引原则:
- 频繁搜索的列
- 经常排序的列
- 经常连接的列
- 指定单独的表空间
不适合创建索引原则:
- 表数据量小
- 仅包含几个不同值的列(如:性别)
- 增删改数据表操作频繁
- 增删改性能要求高于查询
索引使用原则:
- 表中导入数据后再创建索引。否则每次表中插入数据时都必须更新索引
- 在适当的表和字段中创建索引。如果经常检索的数据少于表中数据的15%,则需要创建索引
- 限制表中索引数目。索引越多,在修改表时,对索引做出修改的工作量越大(同时索引也是占空间的)
索引的分类:
-
B-TREE索引 (又叫“普通索引”)
使用方式:适合创立在重复值比较少的列上,如:姓名。
分析:先走索引,找到rowid(一个伪列),根据rowid查出数据(这个效率会搞很多)
语法:create index 索引名 on 表名(列名)
-
唯一索引
使用方式:适合在值唯一的字段,如:身份证(主键约束、唯一约束默认会添加唯一约束)
语法:create unique index 索引名 on 表名(列名)
-
位图索引
使用方式:适合在大量相同值。(如:部门编号,工作类别)
语法:create bitmap index 索引名 on 表名(列名)
-
反向索引
使用方式:适用在存储类似序列的值的列上,目的防止某个数据块访问过热(如何批量插入)
语法:create index 索引名 on 表名(列名) reverse
-
组合索引
使用方式:经常作为组合条件的多个列(也可分开建成位图索引)
语法:create bitmap index 索引名 on 表名(列名,列名,…)
-
函数索引
使用方式:适用在经常使用函数的列上
语法:create index 索引名 on 表名(函数(列名))