《Mysql學習MySQL中數據類型相關的優化辦法》要點:
本文介紹了Mysql學習MySQL中數據類型相關的優化辦法,希望對您有用。如果有疑問,可以聯系我們。
MYSQL實例有助于效率的類型選擇
MYSQL實例1、使你的數據盡可能小
MYSQL實例最基本的優化之一是使你的數據(和索引)在磁盤上(并且在內存中)占據的空間盡可能小.這能給出巨大的改進,因為磁盤讀入較快并且通常也用較少的主存儲器.如果在更小的列上做索引,索引也占據較少的資源.
MYSQL實例你能用下面的技術使表的性能更好并且使存儲空間最小:
MYSQL實例?盡可能地使用最有效(最小)的類型.MySQL有很多節省磁盤空間和內存的專業化類型.
MYSQL實例?如果可能使表更小,使用較小的整數類型.例如,MEDIUMINT經常比INT好一些.
MYSQL實例?如果可能,聲明列為NOT NULL.它使任何事情更快而且你為每列節省一位.注意如果在你的應用程序中你確實需要NULL,你應該毫無疑問使用它,只是避免缺省地在所有列上有它.
MYSQL實例2、使用定長列,不使用可變長列
MYSQL實例這條準則對被經常修改,從而容易產生碎片的表來說特別重要.例如,應該選擇 CHAR 列而不選擇 VARCHAR 列.所要權衡的是使用定長列時,表所占用的空間更多,但如果能夠承擔這種空間的耗費,使用定長行將比使用可變長的行處理快得多.
MYSQL實例3、將列定義為 NOT NULL
MYSQL實例這樣處理更快,所需空間更少.而且有時還能簡化查詢,因為不需要檢查是否存在特例 NULL.
MYSQL實例4、考慮使用 ENUM 列
MYSQL實例如果有一個只含有限數目的特定值的列,那么應該考慮將其轉換為 ENUM 列.ENUM 列的值可以更快地處理,因為它們在內部是以數值表示的.
MYSQL實例有關BLOB和TEXT類型
1、使用BLOB和TEXT類型的優點
MYSQL實例用 BLOB 存儲應用程序中包裝或未包裝的數據,有可能使原來需要幾個檢索操作才能完成的數據檢索得以在單個檢索操作中完成.而且還對存儲標準表結構不易表示的數據或隨時間變化的數據有幫助.
MYSQL實例2、使用BLOB和TEXT類型的可能弊端
MYSQL實例另一方面,BLOB 值也有自己的固有問題,特別是在進行大量的 DELETE 或 UPDATE 操作時更是如此.刪除 BLOB 會在表中留下一個大空白,在以后將需用一個記錄或可能是不同大小的多個記錄來填充.
MYSQL實例除非有必要,否則應避免檢索較大的 BLOB 或 TEXT 值.例如,除非肯定WHERE 子句能夠將結果恰好限制在所想要的行上,否則 SELECT * 查詢不是一個好辦法.這樣做可能會將非常大的 BLOB 值無目的地從網絡上拖過來.這是存儲在另一列中的 BLOB 標識信息很有用的另一種情形.可以搜索該列以確定想要的行,然后從限定的行中檢索 BLOB 值.
MYSQL實例3、必要的準則
MYSQL實例對容易產生碎片的表使用 OPTIMIZE TABLE
大量進行修改的表,特別是那些含有可變長列的表,容易產生碎片.碎片不好, 因為它在存儲表的磁盤塊中產生不使用的空間.隨著時間的增長,必須讀取更多的塊才能取到有效的行,從而降低了性能.任意具有可變長行的表都存在這個問題, 但這個問題對 BLOB 列更為突出,因為它們尺寸的變化非常大.經常使用 OPTIMIZE TABLE 有助于保持性能不下降.
MYSQL實例使用多列索引
MYSQL實例多列索引列有時很有用.一種技術是根據其他列建立一個散列值,并將其存儲在一個獨立的列中,然后可通過搜索散列值找到行.這只對精確匹配的查詢有 效.(散列值對具有諸如“<”或“>=”這樣的操作符的范圍搜索沒有用處).在MySQL 3.23版及以上版本中,散列值可利用 MD5( ) 函數產生.散列索引對 BLOB 列特別有用.有一事要注意,在 MySQL 3.23.2 以前的版本中,不能索引 BLOB 類型.甚至是在 3.23.2 或更新的版本中,利用散列值作為標識值來查找 BLOB 值也比搜索 BLOB 列本身更快.
MYSQL實例將 BLOB 值隔離在一個獨立的表中
MYSQL實例在某些情況下,將 BLOB 列從表中移出放入另一個副表可能具有一定的意義,條件是移出 BLOB 列后可將表轉換為定長行格式.這樣會減少主表中的碎片,而且能利用定長行的性能優勢.
MYSQL實例使用ANALYSE過程檢查表列
如果使用的是 MySQL 3.23 或更新的版本,應該執行 PROCEDURE ANALYSE( ),查看它所提供的關于表中列的信息
MYSQL實例
ANALYSE([max elements,[max memory]])
MYSQL實例它檢驗來自你的查詢的結果并返回結果的分析.
MYSQL實例max elements(缺省256)是analyse將注意的每列不同值的最大數量.這被ANALYSE用來檢查最佳的列類型是否應該是ENUM類型.
MYSQL實例max memory(缺省8192)是在analyse嘗試尋找所有不同值的時候應該分配給每列的最大內存量.
MYSQL實例
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])
MYSQL實例例如:
MYSQL實例
mysql>SELECT * FROM student PROCEDURE ANALYSE();
mysql>SELECT * FROM student PROCEDURE ANALYSE(16,256);
MYSQL實例相應輸出中有一列是關于表中每列的最佳列類型的建議.第二個例子要求 PROCEDURE ANALYSE( ) 不要建議含有多于 16 個值或取多于 256 字節的 ENUM 類型(可根據需要更改這些值).如果沒有這樣的限制,輸出可能會很長;ENUM 的定義也會很難閱讀.
MYSQL實例根據 PROCEDURE ANALYSE( ) 的輸出,會發現可以對表進行更改以利用更有效的類型.如果希望更改值類型,使用 ALTER TABLE 語句即可.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6431.html