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