數據庫優化思路
數據庫優化思路有如下幾個方面:
1、建立索引
2、分庫、分表、分區
3、數據庫引擎
mysql比較常用的數據庫引擎是:innodb 、myisam
myisam查詢效率比innodb快1-2倍,
myisam是表級鎖,適用於一次插入多次查詢的表,或者是讀寫分離中讀庫中的表
innodb是行級鎖,適用於頻繁更新,插入,讀寫分離寫庫中的表
詳細可參考:https://www.cnblogs.com/0201zcr/p/5296843.html
4、預處理
實時數據放入緩存中
歷史數據,將復雜sql語句執行出來的結果生成視圖,查詢的時候直接查詢視圖,速率顯著提高。
5、讀寫分離
6、增加服務器內存、CPU及網絡帶寬
對於sql語句優化方面,有如下需要註意的地方:
1、對查詢進行優化,盡量避免全表掃描,首先考慮在where及order by涉及的列上加索引
2、避免在where子句中對字段進行null值判斷,比如select id from where num is null 將會放棄索引進行全表掃描。
解決辦法是設置為默認值,比如0。
3、避免在where子句中使用!= 或者<>,否則會放棄索引進行全表掃描
4、避免在where子句中使用or來連接條件,否則會放棄索引進行全表掃描
解決辦法使用union all
5、避免在where子句中使用in 或則 not in ,否則會放棄索引進行全表掃描
解決辦法使用exists代替in
select num from a where num in (select num from b)
替換為
select num from a exists (select 1 from b where b.num = a.num)
6、避免全模糊查詢,比如select id from a where name like ‘%abc%‘,將放棄索引進行全表掃描
解決辦法使用右模糊查詢,即select id from a where name like ‘abc%‘
7、避免隱式轉換,比如varchar類型的字段a = 1 ,如此會放棄索引進行全表掃描
8、避免在where子句=的左邊進行函數、算數運算或則其他表達式運算,否則將放棄索引進行全表掃描
9、盡量使用數字型字段,若只包含數字信息的字段盡量不要設計成字符串類型
10、使用varchar代替char
11、不要出現select * from a 或者 select count(*) from b 這種無意義的語句
參考文章:https://blog.csdn.net/zhoupan301415/article/details/78257783
https://blog.csdn.net/jie_liang/article/details/77340905
數據庫優化思路