postgresql – 列搜索性能的唯一索引是否更好? (PGSQL和MySQL)
我很好奇
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |