資料庫 排序優化

2021-10-22 03:32:46 字數 1120 閱讀 2777

原則:永遠小表驅動大表

order by子句,盡量使用index方式排序,避免使用filesort方式排序

mysql支援兩種方式的排序,filesort和index,index效率高,mysql掃瞄索引本身完成排序。filesort方式效率較低

order by 滿足兩種情況下,會使用index方式排序

• 1.order by 語句使用索引最左前列

• 2.使用where子句與order by子句條件組合滿足索引最左前列

filesort 是在記憶體中還是在磁碟中完成排序的?

mysql 中的 filesort 並不一定是在磁碟檔案中進行排序的,也有可能在記憶體中排序,記憶體排序還是磁碟排序取決於排序的資料大小和 sort_buffer_size 配置的大小。

• 如果 「排序的資料大小」 < sort_buffer_size: 記憶體排序

• 如果 「排序的資料大小」 > sort_buffer_size: 磁碟排序

filesort有兩種演算法-雙路排序和單路排序

雙路排序,mysql4.1之前是使用雙路排序,字面意思就是兩次掃瞄磁碟,最終得到資料,讀取行指標和order by列,對他們進行排序,然後掃瞄已經排序好的列表,按照列表中的值重新從列表中讀取對應的資料輸出

單路排序,從磁碟讀取查詢需要的所有列,按照order by列在buffer對他們進行排序,然後掃瞄排序後的列表進行輸出,它的效率更快一些,避免了第二次讀取資料,並且把隨機io變成了順序io,但是它會使用更多的空間

優化策略調整mysql引數

增加sort_buffer_size引數設定

增大max_lenght_for_sort_data引數的設定

提高order by的速度

• order by時select * 是乙個大忌,只寫需要的字段

• 當查詢的字段大小總和小於max_length_for_sort_data而且排序字段不是text|blob型別時,會用改進後的演算法–單路排序

• 兩種演算法的資料都有可能超出sort_buffer的容量,超出之後,會建立tmp檔案進行合併排序,導致多次i/o

• 嘗試提高sort_buffer_size

• 嘗試提高max_length_for_sort_data

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

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

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

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

資料庫優化

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