首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >唯一的索引对列搜索性能更好吗?(PGSQL和MySQL)

唯一的索引对列搜索性能更好吗?(PGSQL和MySQL)
EN

Stack Overflow用户
提问于 2018-03-20 04:21:08
回答 2查看 0关注 0票数 0

我很想知道

CREATE INDEX idx ON tbl (columns);

v.V.

CREATE UNIQUE INDEX idx ON tbl (columns);

在扫描索引列时,PostgreSQL或MySQL实现具有显著的算法性能优势,或者UNIQUE关键字简单地在索引旁边引入一个唯一的约束。

我想,公平地说,如果索引可能在内部实现为某种类似hash 1的结构,并且冲突处理根据定义会产生O(1)性能以外的其他东西,那么就可能会有一个边际的好处。在此前提下,如果一个大百分比的值与结构相同,则很可能会退化为线性。

因此,就我的问题而言,假设值的分布是相对离散的和均匀的。

提前谢谢!

对于我来说,这只是一个纯粹的猜测,因为我不熟悉RDBM的内部结构。

EN

Stack Overflow用户

发布于 2018-03-20 12:32:45

如果数据是唯一的,则应创建UNIQUE他们的索引。

这意味着不需要额外的开销,并且在某些情况下会影响优化器的决策,这样它就可以选择更好的算法。

SQL Server和在PostgreSQL,例如,如果在UNIQUE键,优化器将忽略ORDER BY后面使用的子句(因为它们不相关),即这个查询:

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
        )

也将转换为INNER JOIN(相对于SEMI JOIN)如果有一个UNIQUE索引othertable.othercol...

索引总是包含指向行的某种指针(ctidPostgreSQL中的行指针MyISAM中的主键/单位键InnoDB)并且叶子是在这些指针上排序的,因此实际上每个索引叶都是唯一的(尽管它可能并不明显)。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档