關於資料庫優化分可以以下幾個方面來講
先說幾個小的注意點
當表中無主鍵時,首先判斷表中是否有非空的整形唯一索引,如果有,則該列為主鍵,如果不符合上述條件,InnoDB儲存引擎自動建立一個6byte自增主鍵,且_rowid無法被查詢到,如果使用int型別自增主鍵為4byte,所以在建立表時,必選顯式地指定主鍵
我們平時使用的mysql的引擎時innodb,是mysql四種引擎中唯一支援事務的
一張表有且只有一個聚集索引就是主鍵
最左匹配原則
離散型、選擇性最好的列放在最左邊
mysql索引底層實現是B+tree
1、可視情況開啟快取查詢,開啟快取查詢後,當表內資料和欄位沒有變化時,相同sql查詢結果會從mysql快取中讀取,不會再次查詢可提高效率
tips:即使sql相同但編碼不同的查詢語句,也會被mysql認為是兩個查詢,會重新查詢
2、設定最大連線數,預設為100,最大為16384(超過的無效)
可根據實際業務需求適應儲存過程
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子句)全都包含在一個索引中 (聯合索引),可以直接使用索引查詢而不需要回表。這就是覆蓋索引,通過使用覆蓋索引,可以減少搜尋樹的次數,這就是 覆蓋索引,
暫時不太瞭解,先按下不表
才疏學淺斗膽在此拋磚引玉,還望各路大神口下留情