Skip to content

Instantly share code, notes, and snippets.

@vicly
Last active May 21, 2019 21:43
Show Gist options
  • Select an option

  • Save vicly/82333c81ee06cd71510d4e118ae32417 to your computer and use it in GitHub Desktop.

Select an option

Save vicly/82333c81ee06cd71510d4e118ae32417 to your computer and use it in GitHub Desktop.
[索引] #SQL

聚集索引 : clustered index

  • 把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。如:汉语字典本身按照a-z排序,认识拼音的字,可以直接翻到字典到特定区间查,所有读音类似的字都在一起,如 ”术“,”书“
  • 每个table只能有一个聚集索引
  • 最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描

非聚集索引 : nonclustered index

  • 把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。如:不认识的字,必须先按偏旁查找目录,然后再翻到指定页数;注意,偏旁一样的字分散在不同的地方,如 "认",“读”

误区:

  • PK就是聚集索引:盲目把聚集索引建在PK上是浪费,如:PK是GUID,所以你根本不会做id between :id1 and :id2的查询,那么就是在浪费
  • 只要建立索引就能显著提高查询速度:无论是否经常使用聚合索引的其他列,但其起始列一定要是使用最频繁的列;查询中缺少起始列,index不起作用
使用聚集索引 使用非聚集索引
列经常被分组排序
返回某范围内的数据 不应
一个或极少不同值 不应 不应
小数目的不同值 不应
大数目的不同值 不应 应
频繁更新的列 不应
外键列
主键列
频繁修改索引列 不应

PostgreSQL的索引

  • B-Tree: 适合所有的数据类型,支持排序,支持大于、小于、等于、大于或等于、小于或等于的搜索
  • Hash: 只支持等值查询,特别适用于字段VALUE非常长
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment