1.表結構 2.數據類型 3.索引 4.約束 為欄位設定not null非空約束,因為null不僅占據更多的空間,還使對比與索引變得複雜。 5.SQL語句 6.緩存 現在我們大多數時候都是通過ORM框架訪問數據,這些框架往往提供緩存功能(一級緩存或者二級緩存),開啟緩存可以減少訪問資料庫的次數,不僅 ...
1.表結構
- 適當增加冗餘欄位:嚴格按照三範式設計的資料庫很少存在冗餘欄位,獲取信息時通常需要進行表連接查詢,而表連接查詢速度較慢,可以將經常需要跨表查詢的欄位集中到一張表中,以冗餘換速度。
- 垂直分割:把欄位較多的表分割成多張表,以分擔主表的壓力,提升系統維護性。分割出來的欄位往往是代表次要信息,很少讀取或者更新。
2.數據類型
- 儘量使用簡單的數據類型,int比string查詢效率高。
- 如果一個欄位的取值固定有限,不要將這個欄位設定為string,可以設定為enum(enum以字元串形式顯示,底層以tinyint類型存儲),比如用於存儲性別、國家信息的欄位,因為string欄位複雜,不僅占據較大的空間,而且查詢效率低。
- 固定長度的欄位查詢更快,因為長度固定欄位中的元素占據相同的空間,很容易根據偏移量獲取數據。
3.索引
- 為那些經常出現在查詢條件中、數據穩定的欄位添加索引。
- 表連接時,連接條件儘可能使用數據類型相同的欄位,並且為欄位添加索引。如果連接條件中來自兩張表的兩個欄位數據類型不一致,即使添加了索引,索引無效。
4.約束
為欄位設定not null非空約束,因為null不僅占據更多的空間,還使對比與索引變得複雜。
5.SQL語句
- 避免使用select *:從資料庫中讀取的數據越多,查詢速度越慢,在資料庫與Web伺服器分佈在不同的電腦上時,還會增加網路傳輸的負載。
- 使用連接查詢替代子查詢:子查詢時MySQL需要為子查詢結果建立一張臨時表,查詢完畢銷毀表,表的建立與銷毀的過程耗費較多資源。
- 儘量使用批處理,較少地訪問資料庫,一次執行較多的操作。
6.緩存
現在我們大多數時候都是通過ORM框架訪問數據,這些框架往往提供緩存功能(一級緩存或者二級緩存),開啟緩存可以減少訪問資料庫的次數,不僅提高了反映速度,而且降低了資料庫的壓力。
參考:
http://blog.csdn.net/waferleo/article/details/7179009
http://www.cnblogs.com/nathan-1988/archive/2012/07/17/2596439.html