mysql的where字句调优_mysql中select和where子句优化的总结
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于mysql中select和where子句優(yōu)化的總結(jié),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
數(shù)據(jù)庫優(yōu)化:
1.可以在單個(gè)SQL語句,整個(gè)應(yīng)用程序,單個(gè)數(shù)據(jù)庫服務(wù)器或多個(gè)聯(lián)網(wǎng)數(shù)據(jù)庫服務(wù)器的級(jí)別進(jìn)行優(yōu)化
2.數(shù)據(jù)庫性能取決于數(shù)據(jù)庫級(jí)別的幾個(gè)因素,例如表,查詢和配置設(shè)置
3.在數(shù)據(jù)庫級(jí)別進(jìn)行優(yōu)化,在硬件級(jí)別進(jìn)行優(yōu)化,平衡可移植性和性能
4.合適的結(jié)構(gòu),合適的數(shù)據(jù)類型;執(zhí)行頻繁更新的應(yīng)用程序大量表(少列);分析大量數(shù)據(jù)的應(yīng)用程序少量表(多列);選擇合適的存儲(chǔ)引擎和索引;
5.壓縮適用于InnoDB表的各種工作負(fù)載,以及只讀MyISAM表
6.選擇合適的鎖定策略;InnoDB存儲(chǔ)引擎可以處理大多數(shù)鎖定問題
7.配置的主要內(nèi)存區(qū)域是InnoDB緩沖池和MyISAM密鑰緩存。
8.優(yōu)化select語句,這方面技巧同樣適用于其他帶where的delete語句等,在where子句的列上設(shè)置索引;索引對(duì)于引用多個(gè)列如join和外鍵尤其重要
select where子句優(yōu)化:
1.調(diào)整查詢的結(jié)構(gòu),例如函數(shù)調(diào)用,為結(jié)果集中的每一行只調(diào)用一次,為表中的每一行只調(diào)用一次
2.減少查詢中的全表掃描數(shù)
3.定期使用ANALYZE TABLE語句使表統(tǒng)計(jì)信息保持最新
4.了解特定于每個(gè)表的存儲(chǔ)引擎的調(diào)優(yōu)技術(shù),索引技術(shù)和配置參數(shù)
5.優(yōu)化InnoDB表的單查詢事務(wù)
6.通過閱讀EXPLAIN計(jì)劃并調(diào)整索引,WHERE子句,連接子句等來調(diào)查特定查詢的內(nèi)部詳細(xì)信息
7.調(diào)整MySQL用于緩存的內(nèi)存區(qū)域的大小和屬性。通過有效使用InnoDB緩沖池,MyISAM密鑰緩存和MySQL查詢緩存
8.where條件,去掉不必要的括號(hào),恒定折疊,恒定條件去除,減少不必要的邏輯
9.被索引使用的常量表達(dá)式只計(jì)算一次
10.count(*)直接從表信息中查詢;當(dāng)只有一張表時(shí),not null表達(dá)式也是這樣
11.如果不使用GROUP BY或聚合函數(shù)(COUNT(),MIN()等),HAVING將與WHERE合并
12.常量表,只有一行或空表;where子句作用在primary key或者unique索引上
13.如果ORDER BY和GROUP BY子句中的所有列都來自同一個(gè)表,則在連接時(shí)首選該表
14.如果order by子句和group by子句不一樣,或來自不同的表,則會(huì)創(chuàng)建臨時(shí)表
15.如果使用SQL_SMALL_RESULT修飾符,MySQL將使用內(nèi)存中的臨時(shí)表
16.MySQL甚至無需咨詢數(shù)據(jù)文件即可只從索引中讀取行
17.在輸出每一行之前,將跳過與HAVING子句不匹配的行
以下表被用作常量表:SELECT * FROM t WHERE primary_key=1;
SELECT * FROM t1,t2
WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
以下查詢運(yùn)行速度非???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
ORDER BY key_part1,key_part2,... LIMIT 10;
SELECT ... FROM tbl_name
ORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;假設(shè)索引列是數(shù)值型,以下查詢僅用到了索引樹:SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
SELECT COUNT(*) FROM tbl_name
WHERE key_part1=val1 AND key_part2=val2;
SELECT key_part2 FROM tbl_name GROUP BY key_part1;
以下查詢使用索引按排序順序取回?cái)?shù)據(jù),不需要單獨(dú)排序SELECT ... FROM tbl_name
ORDER BY key_part1,key_part2,... ;
SELECT ... FROM tbl_name
ORDER BY key_part1 DESC, key_part2 DESC, ... ;
總結(jié)
以上是生活随笔為你收集整理的mysql的where字句调优_mysql中select和where子句优化的总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程间通信的几种方法_并发编程中的线程间
- 下一篇: linux 树状结构图,linux下tr