有助於效率的類型選擇
1、使你的資料儘可能小
最基本的最佳化之一是使你的資料(和索引)在磁碟上(並且在記憶體中)佔據的空間儘可能小。這能給出巨大的改進,因為磁碟讀入較快並且通常也用較少的主儲存空間。如果在更小的列上做索引,索引也佔據較少的資源。
你能用下面的技術使表的效能更好並且使儲存空間最小:
·儘可能地使用最有效(最小)的類型。MySQL有很多節省磁碟空間和記憶體的專業化類型。
·如果可能使表更小,使用較小的整數類型。例如,MEDIUMINT經常比INT好一些。
·如果可能,聲明列為NOT NULL。它使任何事情更快而且你為每列節省一位。注意如果在你的應用程式中你確實需要NULL,你應該毫無疑問使用它,只是避免預設地在所有列上有它。
2、使用定長列,不使用可變長列
這條準則對被經常修改,從而容易產生片段的表來說特別重要。例如,應該選擇 CHAR 列而不選擇 VARCHAR 列。所要權衡的是使用定長列時,表所佔用的空間更多,但如果能夠承擔這種空間的耗費,使用定長行將比使用可變長的行處理快得多。
3、將列定義為 NOT NULL
這樣處理更快,所需空間更少。而且有時還能簡化查詢,因為不需要檢查是否存在特例 NULL。
4、考慮使用 ENUM 列
如果有一個只含有限數目的特定值的列,那麼應該考慮將其轉換為 ENUM 列。ENUM 列的值可以更快地處理,因為它們在內部是以數值表示的。
有關BLOB和TEXT類型
1、使用BLOB和TEXT類型的優點
用 BLOB 儲存應用程式中封裝或未封裝的資料,有可能使原來需要幾個檢索操作才能完成的資料檢索得以在單個檢索操作中完成。而且還對儲存標準表結構不易表示的資料或隨時間變化的資料有協助。
2、使用BLOB和TEXT類型的可能弊端
另一方面,BLOB 值也有自己的固有問題,特別是在進行大量的 DELETE 或 UPDATE 操作時更是如此。刪除 BLOB 會在表中留下一個大空白,在以後將需用一個記錄或可能是不同大小的多個記錄來填充。
除非有必要,否則應避免檢索較大的 BLOB 或 TEXT 值。例如,除非肯定WHERE 子句能夠將結果恰好限制在所想要的行上,否則 SELECT * 查詢不是一個好辦法。這樣做可能會將非常大的 BLOB 值無目的地從網路上拖過來。這是儲存在另一列中的 BLOB 標識資訊很有用的另一種情形。可以搜尋該列以確定想要的行,然後從限定的行中檢索 BLOB 值。