看了《建構高性能web站點》的資料庫性能優化,來寫一下學習筆記:
1.正确使用索引
索引類似于書籍目錄裡的章節;
建立合适的索引是我們自己的事情;
組合索引即先查找哪一章再查找哪一節,不至于找到某一章之後進行掃描,浪費時間;
組合索引的副作用,在應該使用全表掃描的時候使用了索引掃描,将導緻時間的大量浪費;
使用慢查詢分析工具,找出用時超過一秒的查詢;
索引付出了空間代價;
索引适合在select查詢占比大的站點使用,若更新和插入操作較多,會引發較多的索引計算,站點可能不适合使用索引,需自行權衡。
2.鎖定與等待
減少表鎖定等待;
表鎖定即10個更新操作,一個一個完成,行鎖定即利用多線程同步進行;
表鎖定和行鎖定需自行權衡。
3.事務性表的性能
選擇事務日志何時寫入磁盤,三個選項(0,1,2),配置為2時比較适宜。
4.使用查詢緩存
查詢緩存有一個要注意的問題——緩存過期政策,mysql的機制是表有更新則涉及此表的所有查詢緩存都會失效,是以當更新和查詢操作交替進行時,使用查詢緩存反而會花費更長時間,是以對于查詢多而少更新的表來說,很适合使用查詢緩存。
5.臨時表
設定用于存儲臨時表的記憶體空間大小,使得儲存臨時表盡量使用記憶體,而不是使用比較慢的磁盤。
6.線程池
為了減少建立程序的的開銷,可以使用持久連接配接。
7.反範式化設計
在某些時候,設計不滿足範式的表來減少聯合查詢花費的時間。
8.放棄關系型資料庫
當資料适合存儲在key-value資料庫中時,使用memcacheDB會有比mysql更好的表現。