樓主現在大三,在北京的一個公司實習。前一段時間參與一個系統,使用的MySQL的的和業務邏輯比較複雜,項目運行時明顯速度很慢,所以用本來的知識和新收集的一些知識進行了一些優化,
- 1.首主最主要的當然是減少和數據庫的連接。
系統中使用的的的MyBatis和懶加載來避免進行多次數據庫連接。但是當數據量大的時候一定要進行拆分 - 2.建立索引
通過對查詢進行優化,要儘量避免全表掃描,首先應考慮在其中及順序涉及的列上建立索引時,InnoDB的的的索引是乙樹數據結構。空間索引使用ř樹,R樹是用於索引多維數據的專利數據結構索引記錄存儲在其乙樹或 - [R樹數據結構的葉頁中索引頁的默認大小爲16KB在這裏不詳細說要注意的是索引的最左前綴原則
最左前綴:顧名思義,就是最左優先,我們創建了(A,B,C)多列索引,相當於創建了的(A)中單列索引,(A,B組合引以及(A,B,C )組合索引。 - 3.避免在哪裏子句中使用或來連接條件如果一個字段有索引,一個字段沒有索引,將導致引擎放棄使用索引而進行全表掃描。
- 4.exit代替in
- 5.後面有兩個並且其中一個沒有索引。用union all代替或
- 6.不要在哪裏子句中的“=”左邊進行函數,算術運算或其他表達式運算,否則系統將可能無法正確使用索引
- 7.對於多張大數據量(這裏幾百條就算大了)的表JOIN,要先分頁再加入,否則邏輯讀會很高,性能很差
- 8.從表中選擇計數(*);這樣不帶任何條件的計數會引起全表掃描,並且沒有任何業務意義,是一定要杜絕的
- 9.儘量避免大事務操作,提高系統併發能力。