MySQL數(shù)據(jù)庫查詢性能優(yōu)化策略
優(yōu)化查詢
使用Explain語句分析查詢語句
Explain 用來分析 SELECT 查詢語句,開發(fā)人員可以通過分析 Explain 結(jié)果來優(yōu)化查詢語句。
通過對查詢語句的分析,可以了解查詢語句的執(zhí)行情況,找出查詢語句執(zhí)行的瓶頸,從而優(yōu)化查詢語句.
使用索引查詢
MySql中提高性能的一個最有效的方式就是對數(shù)據(jù)表設(shè)計合理的索引.
索引提供了高效訪問數(shù)據(jù)的方法,并且加快查詢速度.
如果查詢時沒有使用索引,那么查詢語句將掃描表中所有的記錄.在數(shù)據(jù)量大的時候,這樣查詢速度會很慢.
使用索引進行查詢,查詢語句可以根據(jù)索引快速定位到待查詢記錄,從而減少查詢記錄數(shù),達到提高查詢速度的目的.
幾種特殊情況(使用帶索引的字段查詢時,索引不起作用)
- 使用Like關(guān)鍵字,如果匹配字符串的第一個字符為"%",索引不會起作用,如果第一個關(guān)鍵字不是 "%",那么索引會起作用.
- MySQL可以為多個字段創(chuàng)建索引,一個索引可以包括16個字段,只有查詢條件中使用這些字段中的第一個字段時,索引才會被使用.
- 查詢關(guān)鍵字只有 OR ,且OR左右兩邊的列都是索引時,索引才起作用.
優(yōu)化子查詢
子查詢雖然可以使查詢語句更靈活,但執(zhí)行效率不高.因為MySQL需要為內(nèi)層查詢語句的查詢結(jié)果建立一個臨時表.
可以使用連接查詢代替子查詢,連接查詢不需要建立臨時表,其速度比子查詢要快.
優(yōu)化數(shù)據(jù)訪問
1.減少請求的數(shù)據(jù)量
- 只返回必要的列,最好不要用 select * 這種語法;
- 只返回必要的行,使用limit語句限制獲取數(shù)據(jù)的條數(shù);
- 緩存重復查詢的數(shù)據(jù): 使用緩存可以避免在數(shù)據(jù)庫中查詢,特別是在數(shù)據(jù)被經(jīng)常反復查詢時,緩存帶來的查詢性能的提升,將會是非常明顯的.
2.減少服務(wù)器端掃描的行數(shù)
最有效的方法是: 使用索引來覆蓋查詢;
重構(gòu)查詢方式
1.切分大查詢
一個大查詢?nèi)绻淮涡詧?zhí)行的話,可能一次鎖住很多數(shù)據(jù),占滿整個事務(wù)日志,耗盡系統(tǒng)資源,阻塞很多小的但重要的查詢.
2.分解大連接查詢
將一個大連接查詢分解成對每一個表進行一次單表查詢,然后在應(yīng)用程序中進行關(guān)聯(lián).
這樣做的好處有:
- 讓緩存更高效. 對于連接查詢,如果其中一個表發(fā)生變化,那么整個查詢緩存就無法使用了.而分解后的多個查詢,即使其中一個表的查詢發(fā)生變化,那么對于其他表的查詢緩存依然可以使用.
- 分解成單表查詢,這些單表查詢的緩存結(jié)果更可能被其他查詢使用到,從而減少冗余記錄的查詢.
- 減少鎖競爭.
- 在應(yīng)用層進行連接,可以更容易的對數(shù)據(jù)庫進行拆分,從而更容易做到高性能和可伸縮.
優(yōu)化數(shù)據(jù)庫結(jié)構(gòu)
1.將字段很多的表分解成多個表
對于字段較多的表,如果有些字段的使用頻率很低,可將這些字段分離出來形成了新表.
當一個表的數(shù)據(jù)量很大時,會由于使用頻率低的字段的存在而變慢.
2.增加中間表
對于經(jīng)常需要聯(lián)合查詢的表,可以建立中間表以提高查詢效率.
3.優(yōu)化插入記錄的速度
插入記錄時,影響插入速度的主要是索引,唯一性校驗,一次插入記錄條數(shù)等.根據(jù)這些情況可以分別進行優(yōu)化.
優(yōu)化MySQL服務(wù)器
1.優(yōu)化服務(wù)器硬件
針對性能瓶頸,提高硬件配置,可以提高數(shù)據(jù)庫的查詢和更新速度.
- 配置較大的內(nèi)存.
- 配置高速磁盤系統(tǒng),以減少讀盤的等待時間.
- 合理分配磁盤IO.
- 配置多處理器,MySQL是多線程的數(shù)據(jù)庫,多處理器可同時執(zhí)行多個線程.
2.優(yōu)化MySQL參數(shù)
優(yōu)化MySQL參數(shù)可以提高資源利用率,從而提高服務(wù)器性能.
以上就是MySQL數(shù)據(jù)庫查詢性能優(yōu)化策略的詳細內(nèi)容,更多關(guān)于MySQL查詢性能優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL Threads_running飆升與慢查詢的相關(guān)問題解決
這篇文章主要介紹了MySQL Threads_running飆升與慢查詢的問題解決,幫助大家更好的理解和學習使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2021-05-05Centos7下無法遠程連接mysql數(shù)據(jù)庫的原因與解決
MySQL是由Oracle公司開發(fā)的開源SQL數(shù)據(jù)庫管理系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于在Centos7下無法遠程連接mysql數(shù)據(jù)庫的原因與解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09通過sysbench工具實現(xiàn)MySQL數(shù)據(jù)庫的性能測試的方法
sysbench是一款壓力測試工具,可以測試系統(tǒng)的硬件性能,也可以用來對數(shù)據(jù)庫進行基準測試。這篇文章主要介紹了通過sysbench工具實現(xiàn)MySQL數(shù)據(jù)庫的性能測試 ,需要的朋友可以參考下2019-07-07MySQL優(yōu)化之表結(jié)構(gòu)優(yōu)化的5大建議(數(shù)據(jù)類型選擇講的很好)
很多人都將 數(shù)據(jù)庫設(shè)計范式 作為數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計“圣經(jīng)”,認為只要按照這個范式需求設(shè)計,就能讓設(shè)計出來的表結(jié)構(gòu)足夠優(yōu)化,既能保證性能優(yōu)異同時還能滿足擴展性要求2014-03-03