索引是对数据库中一列或几列的数据按照特定的数据结构进行排序保存的一种方式。使用索引可以加快数据库查询或排序时的速度。如果不使用索引那么查询数据时就会进行全表扫描也就是每条数据读取一遍看是不是要找的值,而使用索引可以快速找到要找的数据,不用扫描所有数据。
- 索引的优点:
可以大大提高数据查询的速度
在实现数据的参考完整性方面,可以加快表和表之间的连接
在分组和排序时,可以减少分组和排序的时间
当然,索引也有缺点,所以我们不能在表中随意的创建索引
索引的缺点
创建和维护索引需要耗费时间,数据量越大耗费时间也越长
索引需要占用额外的磁盘空间,如果数据量很大又有大量索引,那么索引文件大小增加很快
对表中数据改动的时候,索引需要动态维护,降低了数据操作的速度索引类型
PostgreSQL提供的索引类型有: B-tree、Hash、GiST和GIN。大多数情况下,我们使用比较常用的B-tree索引。
- B-tree索引适合处理那么些能够按照顺序存储的数据,它适合用于比较操作时经常用到的字段。
- Hash索引只能处理简单的等于比较。当一个字段涉及到使用“=”操作符进行比较时查询规划器会考虑使用Hash索引。
- GiST索引不只是一种索引,还是一种架构,可以实现很多不同的索引策略。所以,GiST索引可以使用的特定操作符类型高度依赖于索引策略(操作符类)。
- GIN索引是反转索引,它可以处理包含多个键的值(比如数组)。和GiST索引类似,GIN支持用户定义的索引策略,GIN索引可以使用的特定操作符类型根据索引策略不同而不同。
- 创建、删除索引
create index idx_name on table_name(column_name); #创建B-tree索引
create index idx_name on table_name using hash (column_name); #创建Hash索引
drop index idx_name; #删除索引
- 索引的设计原则
1、索引并不是越多越好,索引太多会影响insert,delete,update的性能。
2、对于经常查询的字段应该建立索引
3、避免对经常更新的表进行过多的索引
4、数据量很小的表最好不要使用索引,由于数据量少,扫描表的时间可能比查询索引时间要短,索引没有效果
5、不要在不同值少的列上建立索引,例如 表示性别的字段一般只有 ‘男’和‘女’两个不同值,如果建立索引会严重降低更新速度。
6、在频繁进行排序或分组的列上建立索引时,如果待排序的列有多个,可在这些列上建立联合索引。