簡體   English   中英

使用主鍵作為索引

[英]Using Primary Keys as Index

在我的應用程序中,我通常使用主鍵作為訪問數據的方式。 但是我被告知為了提高性能,我應該在我的表中索引列,但是我不知道應該索引哪些列。

現在問題:

1)將主鍵作為索引是否是個好主意?(假設主鍵是唯一的,一個id

2)我怎么知道要索引的列?

1) 主鍵在Postgres中自動使用唯一索引實現
MySQL也是如此。

你在這里完成了。

2)關於其他指數的建議,請考慮這個密切相關的答案:
優化PostgreSQL只讀表

同樣,MySQL和Postgres的基礎是相同的。 但是,如果您需要,Postgres具有更多高級功能,如部分或功能索引 但是,從基礎知識開始。

您的主鍵已經有一個PostgreSQL自動為您創建的索引。 您無需再次索引該列。

至於其他領域,請看看這里關於計算基數的文章: http//kirk.webfinish.com/2013/08/some-help-to-find-uniqueness-in-a-大表有一對多場/

完全唯一的字段是候選字段,沒有唯一性的字段對索引無用。 甜蜜點是中間的基數(.5)。

當然,您應該查看WHERE子句中使用的列。 索引不屬於您的quals的列是沒用的。

只有在正式將主鍵定義為主鍵時,主鍵才會具有idex。 大多數人忘記制作索引的地方是Foriegn鍵,它們通常不會自動編入索引,並且幾乎總是會參與連接並因此編入索引。 索引的其他候選者是您經常過濾數據的東西,其中包含大量可能的值,例如名稱,部件號,開始日期等。

1)將主鍵作為索引是否是個好主意?(假設主鍵是唯一的,一個id

我所知道的所有DBMS都會自動在PK下創建一個索引。

在MySQL / InnoDB的情況下,PK不僅會被索引,而且該索引將成為聚簇索引

(順便說一下,只是說“主鍵”意味着它是唯一的,所以沒有必要明確說明“假設主鍵是唯一的”。)

2)我怎么知道要索引的列?

這取決於需要支持哪些查詢。

但請注意,添加索引不是免費的,而是工程權衡的問題 - 雖然某些查詢可能會從索引中受益,但實際上有些查詢可能會受到影響。 例如:

  • FOO上的索引將顯着加快SELECT * FROM T WHERE FOO = ...
  • 但是,相同的索引會稍微減慢INSERT INTO T VALUES (...)

在大多數情況下,你喜歡SELECT中的大加速而不是INSERT中的小減速,但情況可能並非總是如此。

索引和數據庫性能通常是一個復雜的主題,超出了簡單的StackOverflow帖子的范圍,但如果你感興趣我熱烈推薦閱讀使用索引,盧克!

暫無
暫無

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

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