三招搞惦MySQL數(shù)據(jù)庫性能優(yōu)化
以下的文章主要介紹的是對MySQL數(shù)據(jù)庫性能進(jìn)行優(yōu)化的的幾大絕招,其中包括選取最適用的字段屬性,使用連接(JOIN)來代替子查詢(Sub-Queries),使用聯(lián)合 (UNION)來代替手動創(chuàng)建的臨時表的內(nèi)容介紹。
1. 選取最適用的字段屬性
MySQL可以很好的支持大數(shù)據(jù)量的存取,但是一般說來,數(shù)據(jù)庫中的表越小,在它上面執(zhí)行的查詢也就會越快。因此,在創(chuàng)建表的時候,為了獲得更好的性能,我們可以將表中字段的寬度設(shè)得盡可能小。例如,在定義郵政編碼這個字段時,如果將其設(shè)置為CHAR(255),顯然給數(shù)據(jù)庫增加了不必要的空間,甚至使用VARCHAR這種類型也是多余的,因為CHAR(6)就可以很好的完成任務(wù)了。同樣的,如果可以的話,我們應(yīng)該使用MEDIUMINT而不是BIGIN來定義整型字段。
另外一個提高效率的方法是在可能的情況下,應(yīng)該盡量把字段設(shè)置為NOT NULL,這樣在將來執(zhí)行查詢的時候,數(shù)據(jù)庫不用去比較NULL值。
對于某些文本字段,例如“省份”或者“性別”,我們可以將它們定義為ENUM類型。因為在MySQL中,ENUM類型被當(dāng)作數(shù)值型數(shù)據(jù)來處理,而數(shù)值型數(shù)據(jù)被處理起來的速度要比文本類型快得多。這樣,我們又可以提高數(shù)據(jù)庫的性能。
2. 使用連接(JOIN)來代替子查詢(Sub-Queries)
MySQL從 4.1開始支持SQL的子查詢。這個技術(shù)可以使用 SELECT語句來創(chuàng)建一個單列的查詢結(jié)果,然后把這個結(jié)果作為過濾條件用在另一個查詢中。例如,我們要將客戶基本信息表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售信息表中將所有發(fā)出訂單的客戶ID取出來,然后將結(jié)果傳遞給主查詢,如下所示:
DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務(wù)或者表鎖死,并且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連接(JOIN)替代。例如,假設(shè)我們要將所有沒有訂單記錄的用戶取出來,可以用下面這個查詢完成:
SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
如果使用連接(JOIN)來完成這個查詢工作,速度將會快很多。尤其是當(dāng)salesinfo表中對CustomerID建有索引的話,性能將會更好,查詢?nèi)缦拢?/P>
SELECT * FROM customerinfo
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL
連接(JOIN)之所以更有效率一些,是因為 MySQL不需要在內(nèi)存中創(chuàng)建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。
3. 使用聯(lián)合 (UNION)來代替手動創(chuàng)建的臨時表
MySQL 從 4.0 的版本開始支持 UNION 查詢,它可以把需要使用臨時表的兩條或更多的 SELECT 查詢合并的一個查詢中。在客戶端的查詢會話結(jié)束的時候,臨時表會被自動刪除,從而保證數(shù)據(jù)庫整齊、高效。使用 UNION 來創(chuàng)建查詢的時候,我們只需要用 UNION作為關(guān)鍵字把多個 SELECT 語句連接起來就可以了,要注意的是所有 SELECT 語句中的字段數(shù)目要想同。下面的例子就演示了一個使用 UNION的查詢。
SELECT Name, Phone FROM client
UNION
SELECT Name, BirthDate FROM author
UNION SELECT Name, Supplier FROM product
上述的相關(guān)內(nèi)容就是對于優(yōu)化MySQL數(shù)據(jù)庫性能的“妙手”的描述,希望會給你帶來一些幫助在此方面。
- 1WinXP瘦身辦法
- 2更改屏幕保護(hù)程序關(guān)聯(lián)方式
- 3at命令的用法
- 4磁盤格式的問題
- 5舉例說明使用MATLAB Coder從MATLAB生成C/C++代碼步驟
- 6如保學(xué)好JavaScript?初學(xué)者應(yīng)注意的七個細(xì)節(jié)
- 7解決某些網(wǎng)頁不能訪問
- 8光驅(qū)讀盤不正常
- 9巧妙安裝各種Windows操作系統(tǒng)
- 10工廠倉庫管理軟件(網(wǎng)絡(luò)版)
- 11編程總結(jié)之關(guān)于編程的淺學(xué)習(xí)與深學(xué)習(xí)
- 12設(shè)置開始菜單中的用戶名
- 13【CC++語言入門篇】-- 剖析浮點數(shù)
- 14在DOS下安裝Win XP
- 15禁止winxp的默認(rèn)硬盤共享
- 16AWARD BIOS設(shè)置詳解
- 17解決無法關(guān)機問題
- 18QQ密碼遺忘了怎么辦
- 19解決鼠標(biāo)亂動問題
- 20解開被鎖定的.reg與.inf文件
- 21操作系統(tǒng)停止響應(yīng)
- 22解決QQ和360軟件共存的辦法--無聊的戰(zhàn)爭
- 23怎樣設(shè)置一些常用軟件通過代理上網(wǎng)
- 24在Windows XP中對文件進(jìn)行加密
- 25解決系統(tǒng)托盤區(qū)的圖標(biāo)丟失,音量控制圖標(biāo)都不見了
- 26為文件夾添加背景音樂
- 27怎樣隱藏共享資源
- 28Win XP系統(tǒng)搜索故障以及處理辦法點點通
- 29網(wǎng)卡沒有安裝成功該怎么解決
- 30百度筆試題:malloc/free與new/delete的區(qū)別
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓