數據庫優化
1. SQL查詢優化
- 避免全表掃描,應考慮在 where 及 order by 涉及的列上建立索引
- 查詢時使用select明確指明所要查詢的字段,避免使用select *的操作
- SQL語句儘量大寫,如
SELECT name FROM t WHERE id=1
- 儘量避免在 where 子句中使用!=或<>操作符, MySQL只有對以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE,如
SELECT id FROM t WHERE name LIKE ‘abc%’
- 對於模糊查詢,如:
SELECT id FROM t WHERE name LIKE ‘%abc%’
將導致全表掃描,應避免使用,若要提高效率,可以考慮全文檢索 - 遵循最左原則,在where子句中寫查詢條件時把索引字段放在前面
- 能使用關聯查詢解決的儘量不要使用子查詢,能不使用關聯查詢的儘量不要使用關聯查詢
- 不需要獲取全表數據的時候,不要查詢全表數據,使用LIMIT來限制數據
2. 數據庫優化
對於表結構
- 在進行表設計時,可適度增加冗餘字段(反範式設計),減少JOIN操作;
- 多字段表可以進行垂直分表優化,多數據表可以進行水平分表優化;
- 選擇恰當的數據類型,如整型的選擇;
對於SQL語句
- 編寫SQL時使用上面的方式對SQL語句進行優化;
- 使用慢查詢工具找出效率低下的SQL語句進行優化;
對於索引
- 對較頻繁的作爲查詢條件的字段創建索引;唯一性太差的字段不適合單獨創建索引,即使頻繁作爲查詢條件;更新非常頻繁的字段不適合創建索引;
對於引擎
- 對於強調快速讀取的操作,可以考慮使用MyISAM數據庫引擎;
其他
- 構建緩存,減少數據庫磁盤操作;
- 可以考慮結合使用內在型數據庫,如Redis,進行混合存儲