天天看點

資料庫性能優化學習小記1.正确使用索引2.鎖定與等待3.事務性表的性能4.使用查詢緩存5.臨時表6.線程池7.反範式化設計8.放棄關系型資料庫

看了《建構高性能web站點》的資料庫性能優化,來寫一下學習筆記:

1.正确使用索引

索引類似于書籍目錄裡的章節;

建立合适的索引是我們自己的事情;

組合索引即先查找哪一章再查找哪一節,不至于找到某一章之後進行掃描,浪費時間;

組合索引的副作用,在應該使用全表掃描的時候使用了索引掃描,将導緻時間的大量浪費;

使用慢查詢分析工具,找出用時超過一秒的查詢;

索引付出了空間代價;

索引适合在select查詢占比大的站點使用,若更新和插入操作較多,會引發較多的索引計算,站點可能不适合使用索引,需自行權衡。

2.鎖定與等待

減少表鎖定等待;

表鎖定即10個更新操作,一個一個完成,行鎖定即利用多線程同步進行;

表鎖定和行鎖定需自行權衡。

3.事務性表的性能

選擇事務日志何時寫入磁盤,三個選項(0,1,2),配置為2時比較适宜。

4.使用查詢緩存

查詢緩存有一個要注意的問題——緩存過期政策,mysql的機制是表有更新則涉及此表的所有查詢緩存都會失效,是以當更新和查詢操作交替進行時,使用查詢緩存反而會花費更長時間,是以對于查詢多而少更新的表來說,很适合使用查詢緩存。

5.臨時表

設定用于存儲臨時表的記憶體空間大小,使得儲存臨時表盡量使用記憶體,而不是使用比較慢的磁盤。

6.線程池

為了減少建立程序的的開銷,可以使用持久連接配接。

7.反範式化設計

在某些時候,設計不滿足範式的表來減少聯合查詢花費的時間。

8.放棄關系型資料庫

當資料适合存儲在key-value資料庫中時,使用memcacheDB會有比mysql更好的表現。