MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc

MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc

ID:56580445

大?。?8.00 KB

頁數(shù):10頁

時(shí)間:2020-06-28

MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc_第1頁
MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc_第2頁
MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc_第3頁
MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc_第4頁
MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc_第5頁
資源描述:

《MYSQL專題查詢優(yōu)化_使用索引_安全隱患_事務(wù)與鎖.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、MYSQL專題1.查詢優(yōu)化2.使用索引3.安全隱患4.事務(wù)與鎖作者:鄺偉林梧桐網(wǎng)絡(luò)工作室MySQL優(yōu)化查詢操作數(shù)據(jù)庫最重要的一個(gè)環(huán)節(jié)就是查詢,如何優(yōu)化數(shù)據(jù)庫查詢加快查詢速度與最優(yōu)化數(shù)據(jù)庫空間顯得尤為重要,下面我將從多個(gè)方面以分析原理與具體采取怎樣的措施的方式進(jìn)行講解。(一)給字段選取最合適的數(shù)據(jù)類型選擇CHAR還是VARCHAR?我們知道,這兩個(gè)屬性都是給字符分配空間的,一個(gè)是定長(zhǎng),一個(gè)是變長(zhǎng),對(duì)于使用MyISAM數(shù)據(jù)存儲(chǔ)引擎的表,在能夠比較事先確定長(zhǎng)度的情況下,比如一個(gè)郵政編碼,最好使用CHAR類型,因?yàn)椴樵兌ㄩL(zhǎng)的數(shù)據(jù)比查

2、詢變長(zhǎng)的數(shù)據(jù)要快,再則,盡可能地將字段的寬度設(shè)得小些,以免增加不必要的空間;對(duì)于MEMORY數(shù)據(jù)表,由于目前都使用固定長(zhǎng)度的數(shù)據(jù)行存儲(chǔ),因此無論使用CHAR或VARCHAR列都沒有關(guān)系,兩者都是作為CHAR類型處理的。對(duì)于InnoDB數(shù)據(jù)表,內(nèi)部的行存儲(chǔ)格式?jīng)]有區(qū)分固定長(zhǎng)度和可變長(zhǎng)度列(所有數(shù)據(jù)行都使用指向數(shù)據(jù)列值的頭指針),因此在本質(zhì)上,使用固定長(zhǎng)度的CHAR列不一定比使用可變長(zhǎng)度VARCHAR列簡(jiǎn)單。因而,主要的性能因素是數(shù)據(jù)行使用的存儲(chǔ)總量。由于CHAR平均占用的空間多于VARCHAR,因此使用VARCHAR來最小化需

3、要處理的數(shù)據(jù)行的存儲(chǔ)總量和磁盤I/O是比較好的。需要注意的是,如果MySQL運(yùn)行在嚴(yán)格模式,使用CHAR類型時(shí)超過列長(zhǎng)度的值將不被保存,并且會(huì)出現(xiàn)錯(cuò)誤;再則,諸如CHAR(10)與VARCHAR(10)檢索到的值并不總是相同,因?yàn)镃HAR列會(huì)刪除尾部的空格,而VARCHAR列會(huì)保留尾部的空格。在選擇FLOAT/DOUBLE/REAL(浮點(diǎn)數(shù))時(shí)需要說明的是浮點(diǎn)數(shù)能夠表示更大的數(shù)據(jù)范圍,但會(huì)引起精度的問題,即,類型為浮點(diǎn)數(shù)的字段值比如123456.31,檢索出來時(shí)值可能會(huì)是123456.30,這時(shí)如果用于做數(shù)據(jù)的比較時(shí)就可能出

4、錯(cuò),要避免這個(gè)問題。同理,給數(shù)值類型選擇字段屬性時(shí),盡可能地減小字段的寬度,如可以使用MEDIUMINT滿足要求的情況就不要將字段設(shè)置為BIGINT,以節(jié)省空間,而一旦表占用的空間越小,檢索的速度就會(huì)越快。(二)BLOB與TEXT的問題第一:在對(duì)設(shè)置為BLOB和TEXT字段屬性的值做大量的刪除或更新操作的時(shí),這種值會(huì)在數(shù)據(jù)表中留下很大的"空洞",以后填入這些"空洞"的記錄可能長(zhǎng)度不同,為了提高性能,建議定期使用OPTIMIZETABLE功能對(duì)這類表進(jìn)行碎片整理.第二:在有BLOB或TEXT時(shí),盡可能地避免使用:select*

5、...,這樣的查詢語句,因?yàn)檫@樣可能會(huì)引起大量的值在網(wǎng)絡(luò)上做無謂的傳輸,此時(shí),我的建議是你可以把有BLOB或TEXT的字段單獨(dú)拿出來用另外一個(gè)表來存儲(chǔ),這樣就可以避免做無謂的檢索大型的值;還有一種方法就是使用合成的索引,它是根據(jù)其它的列的內(nèi)容(或使用MD5,SHA1,CRC32等函數(shù))建立一個(gè)散列值,并把這個(gè)值存儲(chǔ)在單獨(dú)的數(shù)據(jù)列中,通過檢索散列值來找到數(shù)據(jù)行,用散列標(biāo)識(shí)符值查找的速度比搜索BLOB或TEXT列本身的速度快很多。(三)使用NOTNULL把數(shù)據(jù)列定義成不能為空(NOTNULL),這樣有利于簡(jiǎn)化查詢,因?yàn)椴恍枰獧z查

6、值的NULL屬性,有利于檢索引擎做出判斷。(四)使用ENUM如果你擁有的某個(gè)數(shù)據(jù)列的基數(shù)很低(包含的不同的值數(shù)量有限),那么可以考慮把它轉(zhuǎn)換為ENUM列。ENUM值可以被更快地處理,因?yàn)樗鼈冊(cè)趦?nèi)部表現(xiàn)為數(shù)值,通常,檢索數(shù)值要比檢索字符文本要快。(五)優(yōu)化GROUPBY語句默認(rèn)情況下,MySQL排序所有GROUPBY包含的字段,為了避免排序結(jié)果的消耗,你可以指定ORDERBYNULL禁止排序。(六)優(yōu)化JOIN語句Mysql4.1開始支持SQL的子查詢。這個(gè)技術(shù)可以使用SELECT語句來創(chuàng)建一個(gè)單列的查詢結(jié)果,然后把這個(gè)結(jié)果作

7、為過濾條件用在另一個(gè)查詢中。使用子查詢可以一次性的完成很多邏輯上需要多個(gè)步驟才能完成的SQL操作,同時(shí)也可以避免事務(wù)或者表鎖死,并且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連接(JOIN)替代。假設(shè)我們要將所有沒有訂單記錄的用戶取出來,可以用下面這個(gè)子查詢方式完成:SELECT*FROMcustomerinfoWHERECustomerIDNOTin(SELECTCustomerIDFROMsalesinfo)如果使用連接(JOIN)來完成這個(gè)查詢工作,速度將會(huì)快很多。尤其是當(dāng)salesinfo表中對(duì)Cust

8、omerID建有索引的話,性能將會(huì)更好,查詢?nèi)缦拢篠ELECT*FROMcustomerinfoLEFTJOINsalesinfoONcustomerinfo.CustomerID=salesinfo.CustomerIDWHEREsalesinfo.CustomerIDISNULL連接(

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。