2013-08-20 51 views
1

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

現在的問題是:

1)它是一個好主意,使你的主鍵索引(假設主鍵是唯一的,一個id

2)我怎麼會知道?什麼列索引?

回答

3

1)Primary keys使用Postgres中的唯一索引自動實現。
The same is true for MySQL.

你在這裏完成。

2)有關其它指標的建議,認爲這是密切相關的答案:
Optimize PostgreSQL read-only tables

再次,基本是對MySQL和Postgres相同。但是,如果您需要Postgres,可以使用更多高級功能,如partial or functional indices。不過,從基礎開始。

+0

怎麼樣爲MySql? – user962206

+0

@ user962206:相同。 [此處相關問題。(http://stackoverflow.com/questions/1071180/is-the-primary-key-automatically-indexed-in-mysql) –

+0

我更新了我的問題 – user962206

0

您的主鍵已經有一個由PostgreSQL自動爲您創建的索引。您不需要再次對列進行索引。

至於其餘字段去,看看這裏的文章上找出基數: http://kirk.webfinish.com/2013/08/some-help-to-find-uniqueness-in-a-large-table-with-many-fields/

領域是完全獨特的考生,不具有獨特性的一切都是無用的領域指數。甜蜜點是中間的基數(.5)。

當然,您應該看看您在WHERE子句中使用哪些列。索引不屬於您的數據的列是沒有用的。

0

只有當您正式將它們定義爲主鍵時,主鍵纔會有idex。大多數人忘記做索引的地方都是Foriegn鍵,它們通常不會自動編入索引,而且幾乎總是會涉及到連接並因此編入索引。索引的其他候選項是您經常過濾數據的東西,其中包含大量可能的值,例如名稱,部件號,開始日期等。

0

1)是否讓您的主鍵作爲一個指數?(假設主鍵是唯一的,一個id

我知道的所有的DBMS會自動創建的PK下的指數。

在MySQL/InnoDB中的情況下,PK將不只是索引,但該索引將爲clustered index

(順便說一句,只是說「主鍵」意味着它是唯一的,所以沒有必要明確說明「假設主鍵是獨一無二的」。)

2)我怎麼會知道哪些列索引?

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

但要注意添加索引是不是免費的,是工程的權衡的事情 - 而一些查詢可能從索引中受益,有的實際上可能遭受它。例如:

  • FOO上的索引將顯着加快SELECT * FROM T WHERE FOO = ...的速度。
  • 然而,同樣的指數將有所放緩的INSERT INTO T VALUES (...)

在大多數情況下,您希望SELECT在INSERT中的小增速時大加速,但情況並非總是如此。

索引和數據庫性能一般來說是一個複雜的話題,超出了謙虛的StackOverflow文章的範圍,但如果您有興趣,我熱烈推薦閱讀Use The Index, Luke!