1資料庫結構優化
a建表的時候優化:
列選擇原則
1字段類型優先級:整形>date,time->char varchar->text、blob
2合理地設定字段大小夠用就可以
3盡量不要用text類型
4盡量不用NULL() 索引NULL列需要額外的空間來儲存
5對于非負型的資料 (如整型 IP) 來說,要優先用無符号整型來存儲 無符号占多出一倍。
6同财務相關的金額類資料必須使用 decimal 類型。
b反範式設計表 目的–減少表的關聯查詢
方法->備援字段(某字段存儲另一表的統計資訊)
備援表(表中統計或彙總其他表的資訊)
c将字段很多的表分解成多個表:對于使用頻率低的字段分離出來形成新表。
d增加中間表
2查詢語句優化
a 常見的查詢優化
避免直接使用 select *
中 IN 包含的值不應過多
當隻需要一條資料的時候,使用 limit 1
SQL 語句要避免造成索引失效的
如果排序字段沒有用到索引,就盡量少排序
不建議使用%字首模糊查詢
b緩存優化 資料庫打開了 Query Cache(簡稱 QC)功能
c讀寫分離 主資料庫處理增、改、删操作,而從資料庫處理查詢操作。
d mysql的分庫分表 垂直拆分(業務)與水準拆分(表ID)
f EXPLAIN
用 EXPLAIN 檢視 SQL 執行計劃,在查詢語句中加入explain(解釋)
查出來有一個重要的字段是type 表示表的連接配接類型
從最佳類型到最差類型 system const(了解為最佳) eq_ref 等等10個 直到all是最差。
3索引及優化
索引:提高資料查詢的效率 就說是比如:然後說兩條。
- 選擇唯一性索引
- 唯一性索引的值是唯一的,可以更快速的通過該索引來确定某條記錄。
- 為經常需要排序、分組和聯合操作的字段建立索引:
- 為常作為查詢條件的字段建立索引。
- 限制索引的數目: 越多的索引,會使更新表變得很浪費時間。
- 盡量使用資料量少的索引
- 如果索引的值很長,那麼查詢的速度會受到影響。
- 盡量使用字首來索引
- 如果索引字段的值很長,最好使用值的字首來索引。
- 删除不再使用或者很少使用的索引
- 最左字首比對原則,非常重要的原則。
- 盡量選擇區分度高的列作為索引
- 區分度的公式是表示字段不重複的比例
- 索引列不能參與計算,保持列“幹淨”:帶函數的查詢不參與索引。
- 盡量的擴充索引,不要建立索。
4伺服器優化
配置較大的記憶體 配置高速磁盤(SSD等)
5存儲引擎的選擇優化
MyISAM 更适合讀密集的表,而 InnoDB 更适合寫密集的的表。