索引种类详情可参考《PostgreSql 索引》
一、适合创建索引的场景
- 经常与其他表进行连接的表,在连接字段上应该建索引。
- 经常出现在 WHERE 子句中的字段,特别是大表的字段,应该建索引。
- 经常出现在 ORDER BY 子句中的字段,应该建索引。
- 经常出现在 GROUP BY 子句中的字段,应该建索引。
二、不适合创建索引的场景
- 特别小的表(数据小于1000行),不适合创建索引。
- dml 操作频繁,查询操作很少的表,不适合创建索引。
- 查询中很少使用的列,不适合创建索引。
- 选择率太高的列(过滤后超过表总数据量30%),不适合创建索引。
- 大的文本字段,不适合创建索引。
- 存在复合索引时,不适合再创建单列索引(单列查询使用复合索引时,优先考虑最左原则)。
三、删除无用索引
查询数据库中未使用过的索引,确认业务确实用不上后可删除。
--查找未使用过的索引
select indexrelid::regclass as index_name,
relid::regclass as table_name
from pg_stat_user_indexes join pg_index
using(indexrelid)
where idx_scan = 0
and indisunique is false;--删除未使用过的索引
select 'drop index "'||indexrelid::regclass||'";' as dropsql
from pg_stat_user_indexes join pg_index
using(indexrelid)
where idx_scan = 0
and indisunique is false;