0

我有一個名爲Votes的表格。現在我在其某些列上有幾個FK(外鍵)。也如你所知,我需要在FK-column上創建一個索引。如果我在列(例如Votes.user_idUser.id上創建索引,讀寫速度會增加還是下降?讀寫速度是否依賴於索引?

我問,因爲有我需要設置一個FK上多列:

// Votes table 
. post_id on Posts.id 
. user_id on Users.id 
. author_id on Users.id 

而且我需要(Post_id, user_id)一個唯一索引來檢測重複投票。無論如何,三個分離索引和一個唯一索引是投票表上的正常事情?

+0

順便說一句:'author_id'接縫是多餘的。我想它已經存儲在'Posts'表中。 –

+0

@PaulSpiegel是'author_id'已經存儲在'Posts'表中,但是我需要在使用觸發器插入投票後向作者發送通知。 – stack

+0

您可以從'Posts'中選擇'author_id',或者在觸發器中的'INSERT' /'UPDATE'語句中使用'JOIN Posts'。也許你會在這個問題上提出一個新問題,因爲這裏是OT。 –

回答

1
  1. 決定什麼索引將加快SELECTsUPDATEs。如果不知道要搜索的內容,就不能真正選擇索引。
  2. 不要擔心多少(不會太多)會減慢寫入速度。

More on creating indexes將幫助您決定哪些索引值得擁有。

2

創建索引可加快讀取速度,但會減慢寫入速度。

1

外鍵以及唯一索引授予您數據的完整性。 你不應該跳過它們,除非你有很好的理由。 你很少(或根本沒有)找到這樣的原因。

由於索引需要更新,所以寫入訪問會因索引而變慢。 但是這種表現損失是有限的。 相比之下,如果您不想使用索引來搜索,排序或連接表,性能的損失可能會非常大。 從一定大小的表格中,搜索和排序非常緩慢,如果沒有適當的索引,連接實際上是不可能的。

所以在你的情況下,你在問題中定義的索引集不僅僅是「正常」,它是最小值(恕我直言)。不太可能,您需要更多,這取決於其他列和您的查詢。