高性能MySQL读书笔记---查询优化
生活随笔
收集整理的這篇文章主要介紹了
高性能MySQL读书笔记---查询优化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
查詢優(yōu)化
查詢緩慢的原因
-
是否向數(shù)據(jù)庫請求了不必要的數(shù)據(jù)
SELECT * FORM table1 WHERE a=1;SELECT * FORM table1 LEFT JOIN table2 LEFT JOIN table2 where a = b;
1.查詢時是否返回了全部或者大部分?jǐn)?shù)據(jù)然后再進(jìn)行處理的。
2.進(jìn)行單查或者多表聯(lián)查時是否返回了全部列數(shù)據(jù)。例如:查詢時盡量只查自己需要的字段,盡量不要用*查詢
查詢400萬數(shù)據(jù),十個字段時直接使用*查詢耗費時間為11s,只查詢id時耗費3s左右 - 查詢單條數(shù)據(jù)確定行時盡量使用LINIT來限制查詢行數(shù),終止查詢,否則就算找到對應(yīng)列后MsSQL還是繼續(xù)掃描
不加索引的情況下,查詢單條數(shù)據(jù)不加limit 2.5s 加上limit限制0.1s
拆分復(fù)雜的查詢方式
- 將一個復(fù)雜的查詢拆分成多個簡單的查詢。
- 將一次處理大量數(shù)據(jù)的操作,分解為多個小操作。循環(huán)的方式每次處理一部分?jǐn)?shù)據(jù)。一次刪除不要超過10 000行(delete)
- 減少JOIN的使用,把多表聯(lián)查的查詢分解成多個單表查詢,在應(yīng)用程序中實現(xiàn)連接操作
拆分查詢的優(yōu)勢:
減少對COUNT的使用,因為InnoDB使用COUNT是做的全表掃描,對大表使用COUNT查詢會非常緩慢
- 對于需要統(tǒng)計的數(shù)據(jù)冗余的統(tǒng)計表來做統(tǒng)計操作,一個小時或者一天統(tǒng)計一次數(shù)據(jù)
- 使用Redis之類的緩存技術(shù)來做統(tǒng)計功能,例如排行榜和點贊人數(shù)統(tǒng)計可以用redis的有序集合來做
總結(jié)
以上是生活随笔為你收集整理的高性能MySQL读书笔记---查询优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 16.04修改显示字体大小
- 下一篇: Zabbix SQL注入漏洞威胁预警通告