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

前端之家收集整理的这篇文章主要介绍了postgresql – 列搜索性能的唯一索引是否更好? (PGSQL和MySQL)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很好奇
CREATE INDEX idx ON tbl (columns);

CREATE UNIQUE INDEX idx ON tbl (columns);

在扫描索引列时,PostgresqlMysqL实现中是否具有显着的算法性能优势,或者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

猜你在找的Postgre SQL相关文章