程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql入門系列:選擇MYSQL列的類型

Mysql入門系列:選擇MYSQL列的類型

編輯:關於MYSQL數據庫

  2.3 選擇列的類型

  上一節描述了各種可供選擇的MySQL的列類型及其屬性,以及它們可存儲的各種值,所占用的存儲空間等等。但是在實際創建一個表時怎樣決定用哪些類型呢?本節討論在做出決定前應考慮的各種因素。最“常用”的列類型是串類型。可將任何數據存儲為串,因為數和日期都可以串的形式表示。但是為什麼不將所有列都定義為串從而結束這裡的討論呢?讓我們來看一個簡單的例子。假定有一些看起來像數的值。可將它們表示為串,但應該這樣做嗎?這樣做會發生什麼事?

  有一樁事不可避免,那就是可能要使用更多的空間,因為較串來說,數的存儲更為有效。我們可能已經注意到,由於數和串處理方式的不同,查詢結果也有所不同。例如,數的排序與串的排序就有所不同。數2 小於數11,但串“2”按字典順序大於“ 11”。可用如下數值內容的列來搞清這個問題:

  

  將零加到該列強制得出一個數值,但是這樣合理嗎?一般可能不合理。將該列作為數而不是串具有幾個重要的含義。它對每個列值實施串到數的轉換,這是低效的。而且將該列的值轉換為計算結果妨礙MySQL使用該列上的索引,降低了以後的查詢速度。如果這些值一開始就是作為數值存儲的,那麼這些性能上的降低都不會出現。采用一種表示而不用另一種的簡單選擇實際上並不簡單,它在存儲需求、查詢效率以及處理性能等方面都會產生重要的影響。

  前面的例子說明,在選擇列類型時,有以下幾個問題需要考慮:

  ■ 列中存儲何種類型的值?這是一個顯而易見的問題,但必須確定。可將任何類型的值表示為串,尤其當對數值使用更為合適的類型可能得到更好的性能時(日期和時間值也是這樣)。可見,對要處理的值的類型進行評估不一定是件微不足道的事,特別在數據是別人的數據時更是如此。如果正在為其他人建立一個表,搞清列中要存儲的值的類型極為重要,必須提足夠多的問題以便得到作出決定的充足的信息。

  ■ 列值有特定的取值范圍嗎?如果它們是整數,它們總是非負值嗎?如果這樣,可采用UNSIGNED 類型。如果它們是串,總能從定長值集中選出它們嗎?如果這樣, ENUM或SET 是很合適的類型。在類型的取值范圍與所用的存儲量之間存在折衷。需有一個多“大”的類型?對於數,如果其取值范圍有限,可以選擇較小的類型,對取值范圍幾乎無限的數,應該選擇較大的類型。對於串,可以使它們短也可以使它們長,但如果希望存儲的值只含不到10 個字符,就不應該選用CHAR( 2 5 5 )。

  ■ 性能與效率問題是什麼?有些類型比另外一些類型的處理效率高。數值運算一般比串的運算快。短串比長串運行更快,而且磁盤消耗更小。定長類型比可變長類型的性能更好。

  ■ 希望對值進行什麼樣的比較?對於串,其比較可以是區分大小寫的,也可以不區分大小寫。其選擇也會影響排序,因為它是基於比較的。

  ■ 計劃對列進行索引嗎?如果計劃對列進行索引,那麼將會影響您對列類型的選擇,因為有的MySQL版本不允許對某些類型進行索引,例如不能對BLOB 和TEXT 類型進行索引。而且有的MySQL版本要求定義索引列為NOT NULL 的,這使您不能使用NULL 值。

  現在讓我們來更詳細地考慮這些問題。這裡要指出的是:在創建表時,希望作出盡可能好的列類型選擇,但如果所作的選擇其實際並不是最佳的,這也不會帶來多大的問題。可用ALTER TABLE 將原來選擇的類型轉換為更好的類型。在發現數據所含的值比原設想的大時,可像將SMALLINT 更換成MEDIUMINT 那樣簡單地對類型進行更換。有時這種更換也可能很復雜,例如將CHAR 類型更換成具有特定值集的ENUM 類型。在MySQL3.23 及以後的版本中,可使用PROCEDURE ANALYSE( ) 來獲得表列的信息,諸如最小值和最大值以及推薦的覆蓋列中值的取值范圍的最佳類型。這有助於確定使用更小的類型,從而改進涉及該表的查詢的性能,並減少存儲該表所需的空間量。

  2.3.1列中存儲何種類型的值

  在決定列的類型時,首先應該考慮該列的值類型,因為這對於所選擇的類型來說具有最為明顯的意義。通常,在數值列中存儲數,在串列中存儲串,在日期和時間列中存儲日期和時間。如果數值有小數部分,那麼應該用浮點列類型而不是整數類型,如此等等。有時也存

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved