簡體   English   中英

使用 UNIQUE NON NULL 索引和主鍵的查詢是否存在性能差異?

[英]Are there performance differences in queries with UNIQUE NON NULL indexes and Primary keys?

我想使用 PK 或索引的唯一非 null 字段搜索數據庫。 它們之間有性能差異嗎? 我使用 Postgres 作為我的數據庫。 但是一個一般的獨立於數據庫的答案也會很好。

postgreSQL中, 所有索引都是二級索引或非聚集索引 這意味着索引指向,即保存實際列數據的數據結構。 因此,與 UNIQUE 索引相比,主鍵的索引沒有任何結構優勢:使用索引進行過濾的 SELECT 必須反彈到數據堆。

事實上,可能正好相反,因為 postgreSQL 索引可以有 INCLUDES 子句。

例如,考慮具有uniqueidabc列的表。 如果您的工作量很大,使用SELECT b FROM tbl WHERE uniqueid = something查詢,您可以聲明此覆蓋索引

CREATE UNIQUE INDEX uniq ON tbl(uniqueid) INCLUDE (b);

然后可以從索引中滿足您的整個查詢。 這節省了堆的額外行程,因此節省了 IO 和 CPU 時間。

另一方面, MySQLSQL 服務器使用聚集索引作為它們的主鍵。 也就是說,表的數據存儲在主鍵的索引中。 因此,PK 基本上是這樣創建的索引。

CREATE UNIQUE INDEX pk ON tbl(uniqueid) INCLUDE (a, b, c);

在那些數據庫中,PK 的索引確實比單獨的 UNIQUE 索引具有優勢,后者必然是二級或非聚集索引。 (注意:MySQL 的索引沒有INCLUDE()子句。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM