2016-09-15 56 views
0

我在SQL方面並不擅長,我需要諮詢一下建議一個包含約會的表的最佳方法。 我的疑問在於主鍵。Mysql - 約會表的最佳主鍵

我的想法是:

1 - 使用的委任(如無符號整數)的標識的自動增量列。 我對這個解決方案的懷疑是:索引可以達到溢出,即使它非常高,並且當記錄數量增長時,性能可以降低?

2 - 爲每年創建一個表格。 Dubts:維護和執行查詢將會非常複雜。

3-使用組合索引。 配音:如何設置它

4-Other?

感謝。

+0

你有多少個約會?大多數情況下,一個4字節的整數就足夠了。 –

+0

我預計最糟糕的情況是每天有500個約會,然後是每年182.500個約會。 – Fabio

+1

。 。幾個世紀以來,甚至千禧年,你都無需擔心。繼續,使用整數或無符號。 –

回答

0

使用自動增量主鍵。在整數溢出之前,MySQL將無法處理增長的表格。

即使您沒有主鍵,MySQL的性能也會下降很多。這是您開始考慮分區(您的選項2)和歸檔舊數據的時候。但從一開始,自動增量主鍵在單個表上應該做得很好。

+0

我已經看到MySQL滿意的億行表。缺乏PK不會導致性能下降。他的選項2沒有使用「PARTITION」功能。如果他需要用PK以外的任何東西進行搜索,比如日期範圍,AI PK不會「很好」。 –

0

1 - 你認爲你會超過40億行?如果由於表大小而導致您的查詢沒有合適的索引,而不是,則性能下降。 (好吧,有輕微的退化,但不值得擔心。)基於182K /年,MEDIUMINT UNSIGNED(最大16M)就足夠了。

2 - 不!這是一個常見的問題;答案總是「不要創建相同的表」。

3 - 該表的唯一列或列組合是否爲UNIQUE?只需在內部列出它們PRIMARY KEY (...)

數字3通常是優選的。如果沒有唯一的列,請使用編號1.

每年182K行不能證明PARTITIONing。考慮一下,如果你期望超過一百萬行。 (這裏有一個簡單的預測:你在182K增長到一百萬之前重新設計這個模式。)