1. 程式人生 > >數據庫優化思路

數據庫優化思路

掃描 inno 執行 表達式 意義 upa 解決 style 實時數據

數據庫優化思路有如下幾個方面:

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

數據庫優化思路