資料庫優化

2020-10-25 15:01:06

資料庫優化

關於資料庫優化分可以以下幾個方面來講

先說幾個小的注意點

當表中無主鍵時,首先判斷表中是否有非空的整形唯一索引,如果有,則該列為主鍵,如果不符合上述條件,InnoDB儲存引擎自動建立一個6byte自增主鍵,且_rowid無法被查詢到,如果使用int型別自增主鍵為4byte,所以在建立表時,必選顯式地指定主鍵

我們平時使用的mysql的引擎時innodb,是mysql四種引擎中唯一支援事務的

一張表有且只有一個聚集索引就是主鍵

最左匹配原則

離散型、選擇性最好的列放在最左邊

mysql索引底層實現是B+tree

資料庫相關引數的調優

1、可視情況開啟快取查詢,開啟快取查詢後,當表內資料和欄位沒有變化時,相同sql查詢結果會從mysql快取中讀取,不會再次查詢可提高效率

tips:即使sql相同但編碼不同的查詢語句,也會被mysql認為是兩個查詢,會重新查詢

2、設定最大連線數,預設為100,最大為16384(超過的無效)

儲存過程

可根據實際業務需求適應儲存過程

sql語句

sql語句的優化最主要的就是避免全表掃描

1、避免select * 的存在,會導致全表掃描,同時也會增加io負擔

2、在可以確定只存在一個查詢結果或者判斷庫中有無符合條件資料時,使用limit 1來限定查詢結果,limit 1會在查詢到一條資訊後停止查詢返回結果,而不是繼續往後查詢下一條符合條件的資料,即使用select 1 from table where condition limit 1,來代替select count

3、like本身效率就比較低,所以應該儘量避免使用like,左like無法使用索引,右like可以

4、避免在where子句中對欄位進行null判斷,使用null會導致全表掃描

5、在照顧到實際業務需求的同時,在where、order by和join涉及的列上建立索引

6、使用UNION ALL 代替 UNION,如果結果集允許重複的話,UNION會去重效率較低

總結

SQL 優化的實質就是了解優化器的工作原理,儘可能的使用符合優化器工作原理的sql和索引

表的優化

欄位的選擇

為列選擇合適的資料型別

1、在varchar和char中選擇時,應儘量選擇char,定長欄位查詢比可變長度欄位快,簡言之就是空間換時間

2、能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,磁碟和記憶體消耗越小越好

索引

索引是幫助mysql更加高效獲取資料的資料結構,索引建立的應該遵循一下幾個原則

1、where後面匹配的索引關鍵字列越多越好,掃描的資料越精確越少越好(通過索引篩選出的資料越少越好)

2、避免再次排序

3、儘可能的使用覆蓋索引,減少回表操作

覆蓋索引

當sql語句的所求查詢欄位(select列)和查詢條件欄位(where子句)全都包含在一個索引中 (聯合索引),可以直接使用索引查詢而不需要回表。這就是覆蓋索引,通過使用覆蓋索引,可以減少搜尋樹的次數,這就是 覆蓋索引

分庫分表

暫時不太瞭解,先按下不表

才疏學淺斗膽在此拋磚引玉,還望各路大神口下留情