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 参考

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 参考

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要换成对应的表名)
posted @ 2021-09-29 00:22  沧浪浊兮  阅读(83)  评论(0编辑  收藏  举报