資料庫優化

2021-10-25 04:46:10 字數 1714 閱讀 2008

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

先說幾個小的注意點

當表中無主鍵時,首先判斷表中是否有非空的整形唯一索引,如果有,則該列為主鍵,如果不符合上述條件,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子句)全都包含在乙個索引中(聯合索引),可以直接使用索引查詢而不需要回表。這就是覆蓋索引,通過使用覆蓋索引,可以減少搜尋樹的次數,這就是覆蓋索引

同時在某些情況下會發生索引失效的問題,我們在查詢時應避免這些情況的發生

對索引列運算及使用聚合函式

or的左右需同時使用索引,如果只有or的左側或右側使用索引,也會導致索引失效

like以%開頭

索引列上使用!=、<>、not時會導致索引失效

資料型別發生隱式轉換時,varchar型別列的數字不加單引號可能會導致資料型別轉換

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

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

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...

資料庫引擎優化顧問優化資料庫

現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...

資料庫優化

資料庫優化 1 合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是提高查詢效率。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引 在頻繁進行排序或分組 即進行groupby或orderby操作 的列上建立索引...