鄭州北大青鳥:MySQL如何優(yōu)化 WHERE 子句
我們河南北大青鳥鄭州翔天中心專業(yè)的電腦培訓(xùn)學(xué)校,今天給大家分享的是有關(guān)數(shù)據(jù)庫(kù)的相關(guān)知識(shí):MySQL如何優(yōu)化 WHERE 子句。
MySQL的一些優(yōu)化做法如下:
去除不必要的括號(hào):
((a AND b) AND c OR (((a AND b) AND (c AND d))))
-%26gt; (a AND b AND c) OR (a AND b AND c AND d)
展開(kāi)常量:
(a -%26gt; b%26gt;5 AND b=c AND a=5
去除常量條件(在展開(kāi)常量時(shí)需要):
(B%26gt;=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
-%26gt; B=5 OR B=6
常量表達(dá)示在索引中只計(jì)算一次
在單獨(dú)一個(gè)表上做 COUNT(*) 而不使用 WHERE 時(shí), 對(duì)于 MyISAM 和 HEAP 表就會(huì)直接從表信息中檢索結(jié)果。在單獨(dú)一個(gè)表上做任何表 NOT NULL 達(dá)式查詢時(shí)也是這樣做。
預(yù)先探測(cè)無(wú)效的常量表達(dá)式。MySQL會(huì)快速探測(cè)一些不可能的 SELECT 語(yǔ)句并且不返回任何記錄。
當(dāng)沒(méi)用 GROUP BY 或分組函數(shù)時(shí),HAVING 和 WHERE 合并(COUNT(), MIN() 等也是如此)。
為表連接中的每個(gè)表構(gòu)造一個(gè)簡(jiǎn)潔的 WHERE 語(yǔ)句,以得到更快的 WHERE 計(jì)算值并且盡快跳過(guò)記錄
查詢中所有的常量表都會(huì)比其他表更早讀取。一個(gè)常量表符合以下幾個(gè)條件:
空表或者只有一條記錄。
與在一個(gè) UNIQUE 索引、或一個(gè) PRIMARY KEY 的 WHERE 子句一起使用的表,這里所有的索引部分和常數(shù)表達(dá)式做比較并且索引部分被定義為 NOT NULL。
以下的幾個(gè)表都會(huì)被當(dāng)成常量表:
SELECT * FROM t WHERE primary_key=1;
SELECT * FROM t1,t2
WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
MySQL會(huì)進(jìn)各種可能找到表連接最好的連接方法。 如果在 ORDER BY 和 GROUP BY 子句中的所有字段都來(lái)自同一個(gè)表的話,那么在連接時(shí)這個(gè)表就會(huì)優(yōu)先處理。
如果有 ORDER BY 子句和一個(gè)不同的 GROUP BY 子句,或者如果 ORDER BY 或 GROUP BY 中的字段都來(lái)自其他的表而非連接順序中的第一個(gè)表的話,就會(huì)創(chuàng)建一個(gè)臨時(shí)表了。
如果使用 SQL_SMALL_RESULT,MySQL就會(huì)使用內(nèi)存臨時(shí)表了。
所有的表索引都會(huì)查詢,最好的情況就是所有的索引都會(huì)被用到,除非優(yōu)化程序認(rèn)為全表掃描的效率更高。同時(shí),數(shù)據(jù)表掃描是基于判斷最好的索引范圍超過(guò)數(shù)據(jù)表的30%。 現(xiàn)在,優(yōu)化程序復(fù)雜多了,它基于對(duì)一些附加因素的估計(jì),例如表大小,記錄總數(shù),I/O塊大小,因此就不能根據(jù)一個(gè)固定的百分比來(lái)決定是選擇使用索引還是直接掃描數(shù)據(jù)表。
在某些情況下,MySQL可以直接從索引中取得記錄而無(wú)需查詢數(shù)據(jù)文件。如果所有在索引中使用的字段都是數(shù)字類型的話,只需要用索引樹就能完成查詢。
每條記錄輸出之前,那些沒(méi)有匹配 HAVING 子句的就會(huì)被跳過(guò)。
以下幾個(gè)查詢速度非?欤
SELECT COUNT(*) FROM tbl_name;
SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
SELECT MAX(key_part2) FROM tbl_name
WHERE key_part1=constant;
SELECT ... FROM tbl_name
本文源自:http://i3061.cn 轉(zhuǎn)載請(qǐng)注明出處! 更多技術(shù)交流請(qǐng)鏈接:http://i3061.cn/jsjl/
本文由站河南北大青鳥校區(qū)整編而成,如需了解更多IT資訊類的文章、新聞、課程和學(xué)習(xí)技巧、就業(yè)案例、招生詳情等問(wèn)題,可以對(duì)在線咨詢老師進(jìn)行一對(duì)一問(wèn)答!
推薦資訊
- 學(xué)什么技術(shù)好呢,學(xué)北大青鳥網(wǎng)絡(luò)... 2013-04-14
- 現(xiàn)在報(bào)什么專業(yè)好呢?... 2021-01-12
- 常見(jiàn)的硬件故障... 2012-10-13
- 鄭州計(jì)算機(jī)職業(yè)技校推薦... 2021-04-08
- 網(wǎng)絡(luò)工程師需要做些什么工作呢?... 2012-12-09
熱點(diǎn)資訊
- 學(xué)習(xí)SQL數(shù)據(jù)庫(kù)有哪些方法?... 2018-09-07
- 河南IT培訓(xùn):SQLSERVER2000T-SQL的... 2018-09-07
- 使用access數(shù)據(jù)庫(kù)有哪些好處呢?... 2018-09-07
- 網(wǎng)站數(shù)據(jù)庫(kù)老是被入侵該怎么辦?... 2018-09-07
- 半小時(shí)讓你快速M(fèi)ySQL 入門... 2018-09-07