加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 列搜索性能的唯一索引是否更好? (PGSQL和MySQL)

发布时间:2020-12-13 16:28:33 所属栏目:百科 来源:网络整理
导读:我很好奇 CREATE INDEX idx ON tbl (columns); 与 CREATE UNIQUE INDEX idx ON tbl (columns); 在扫描索引列时,PostgreSQL或MySQL实现中是否具有显着的算法性能优势,或者UNIQUE关键字是否在索引旁边引入了唯一的约束. 我认为可能公平地说,由于索引可能在内部
我很好奇
CREATE INDEX idx ON tbl (columns);

CREATE UNIQUE INDEX idx ON tbl (columns);

在扫描索引列时,PostgreSQL或MySQL实现中是否具有显着的算法性能优势,或者UNIQUE关键字是否在索引旁边引入了唯一的约束.

我认为可能公平地说,由于索引可能在内部实现为某种类似于hash1的结构,因此定义中的冲突处理导致O(1)性能以外的其他特性,因此有一个边际效益.在这个前提下,如果很大比例的值与结构相同,则可能会退化为线性.

所以,为了我的问题,假设价值的分布是相对离散和统一的.

提前致谢!

1对于我来说,这是一个纯粹的猜测,因为我不熟悉RDBM内部.

如果您的数据是唯一的,您应该创建一个UNIQUE索引.

这意味着没有额外的开销,并且在某些情况下影响优化器的决定,以便它可以选择更好的算法.

例如,在SQL Server和PostgreSQL中,如果您使用UNIQUE密钥进行排序,则优化程序将忽略此后使用的ORDER BY子句(因为它们不相关),i.即这个查询:

SELECT  *
FROM    mytable
ORDER BY
        col_unique,other_col
LIMIT 10

将使用col_unique上的索引,并且不会对other_col进行排序,因为它是无用的.

这个查询:

SELECT  *
FROM    mytable
WHERE   mycol IN
        (
        SELECT  othercol
        FROM    othertable
        )

如果othertable.othercol上有一个UNIQUE索引,它也将转换为INNER JOIN(而不是SEMI JOIN).

索引总是包含一些指向行的指针(PostgreSQL中的ctid,MyISAM中的行指针,InnoDB中的主键/独占数),并且叶子在这些指针上排序,因此实际上每个索引叶都是唯一的虽然可能不明显).

有关性能详情,请参阅我的博客中的这篇文章:

> Making an index UNIQUE

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读