2010-05-22 72 views
3

我有幾個表中有一些相當標準的數據。有人可以通過告訴我這些數據的最佳列類型來幫助我優化它們。他們旁邊的東西就是我目前的東西。這個數據最有效的MySQL列類型是什麼?

Number (max length 7) --> MEDIUMINT(8) Unsigned 
Text (max length 30) --> VARCHAR(30) 
Text (max length 200) --> VARCHAR(200) 
Email Address (max length 200) --> VARCHAR(200) 
Number (max length 4) --> SMALLINT(5) Unsigned 
Number (either 0 or 1) --> TINYINT(1) Unsigned 
Text (max length 500) --> TEXT 

有什麼建議嗎?我只是用這個猜測,所以我知道他們中的一些錯誤......

回答

0
Number (either 0 or 1) --> TINYINT(1) Unsigned 

這應該是一個布爾值。

+0

我搜索谷歌的MySQL布爾和想出了 http://stackoverflow.com/questions/289727/which-mysql-datatype-to-use-for-storing-boolean-values-from-to-php 自從使用布爾型數據類型還是有其他優點嗎? – Derek 2010-05-22 18:50:07

1

對不起,這不是你的問題的直接答案,但我認爲這需要指出。我想你可能誤解了列類型後括號內整數的用途。

對於VARCHAR類型,您可能已經知道,它限制了最大長度。但是,它不會影響用於存儲特定字符串的字節數。長度爲5的字符串無論是存儲在VARCHAR(100)還是存儲在VARCHAR(200)中,都需要相同數量的字節存儲。

對於整數類型,數字與存儲的字節數沒有任何關係。這是顯示寬度,這是別的。看到manual

另一部分是由MySQL的選擇指定的整數數據類型的顯示寬度括號中的類型base關鍵字以下支持(例如,INT(4))。這個可選的顯示寬度可以被應用程序用來顯示寬度小於爲列指定的寬度的整數值,方法是用空格填充它們。 (也就是說,此寬度出現在結果集返回的元數據中,是否使用取決於應用程序。)

顯示寬度不限制可以存儲在列中的值的範圍也不顯示寬度超過爲列指定的值的位數。

0

你已經很明智了。

請注意,您無法使用列類型優化任何內容。用你做的索引。

+0

我需要索引中的速成課程,截至目前,我只是猜測並將ID作爲主要唯一,希望沒有任何分歧。 – Derek 2010-05-22 19:07:11

0

取決於您對「高效」的定義。對於速度而言,CHAR可以比VARCHAR更快(因爲每行的結束長度相同,因此查找給定的記錄很容易)。但是你所有的領域都必須有固定的長度,否則就不用擔心。

+0

我認爲現代數據庫使用索引來查找特定記錄。所以,隊列並不重要。 – 2010-05-22 18:59:09

+0

現代數據庫使用索引查找特定記錄(即:說「x = 3的記錄是記錄#R」,然後是另一個(內置的)索引以查看「記錄R位於表數據中的位置P文件「,如果所有記錄大小相同,則最後的查找可以完全跳過。 – cHao 2010-05-22 19:19:32