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