SQL SERVER索引与PSQL索引区分介绍
前言
建议先阅读MSSQL-PSQL转换
1. SQL SERVER索引
想象一本汉字新华字典(存储)。
- 其中的汉字(数据)以首字母(聚集索引)排序,我们可以根据首字母判断汉字(某个数据)在字典(硬盘存储)的位置。
- 当然我们也可以根据笔画(非聚集索引)来查询。笔画(非聚集索引)并不与汉字排列顺序(数据存储序列)一致。
1.0 语法
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column_name [ ASC | DESC ] [ ,...n ] )
[ WITH <backward_compatible_index_option> [ ,...n ] ]
[ ON { filegroup_name | "default" } ]
1.1 参考
- 索引的建立:https://www.cnblogs.com/Brambling/p/6754993.html
- 索引的理解:https://blog.csdn.net/ak913/article/details/8026743
- 碎片因子:https://www.cnblogs.com/CareySon/archive/2012/01/06/2313897.html
2.PSQL索引
PostgreSQL提供了多种索引类型: B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN。每一种索引类型使用了 一种不同的算法来适应不同类型的查询。默认情况下, CREATE INDEX命令创建适合于大部分情况的B-tree 索引。
1.0 语法(仅介绍B-Tree和Hash)
-- B-Tree
CREATE TABLE test1 (
id integer,
content varchar
);
CREATE INDEX test1_id_index ON test1 (id);
-- Hash
CREATE INDEX test1_id_index ON test1 (id) USING hash (column);;
2.1 参考
- 索引的基础:http://www.postgres.cn/docs/10/indexes.html
- 索引的理解:https://www.cnblogs.com/abclife/p/11316414.html
3.差别与迁移
- 去掉CLUSTERED、NONCLUSTERED
- PSQL低版本(11以前)不支持覆盖索引(include),SQL SERVER支持
- 去掉碎片因子(with(FILLFACTOR = 80))
- 把GO替换成;(psql没有写GO的习惯)
- UNIQUE INDEX需要包含DISTRIBUTED BY的字段
- SQL SERVER的索引名字过长的,在PSQL可能会被截掉
- SQL SERVER索引名可以重复,但是PSQL不可以,因此将INDEX 替换成INDEX tablename(注意INDEX前的空格;tablename要换成对应的表名)
本文来自博客园,作者:沧浪浊兮,转载请注明原文链接:https://www.cnblogs.com/shixiu/p/15350854.html