Index

如何索引“幾乎”唯一的列?

  • March 22, 2021

我有一個表格,可以保存向使用者發送通知所需的資訊。現在這個表中的 UID 列幾乎是唯一的,因為大多數情況下每個使用者都訂閱了一個設備。但是可能有多個具有相同 UID 的行,因此唯一索引不適用,並且由於數據的幾乎唯一性,我認為通常的索引也沒有用,因為搜尋整個表的索引幾乎需要相同的時間.

目前我想到的解決方案是以逗號分隔的格式將通知表的每一行的主要程式碼保存在使用者表的列中。

索引不需要是唯一的才能高效,事實上,根據我的經驗,我很少發現讓我的索引唯一在性能方面有很大的不同。(在某些情況下,它確實取決於數據大小,但到目前為止對我來說還不夠重要。)請注意,我的經驗是在 Microsoft SQL Server 中,所以知道哪個數據庫系統、版本和實現(如果適用)在這裡會有幫助。

也就是說,在大多數現代關係數據庫管理系統 (RDBMS)中,標準索引是B-Tree索引。這意味著您的數據儲存在B-Tree邏輯資料結構中,該結構比整個未索引表本身的搜尋效率更高。您的數據是“幾乎”唯一還是完全唯一併不重要。如果您的數據完全冗餘(您預期索引的列的每個值都完全相同),那麼索引可能對您沒有多大幫助,但在您的情況下,正常B-Tree索引聽起來會很好.

引用自:https://dba.stackexchange.com/questions/287495