MySQL優化
優化分為六大部分:
- SQL語句的優化
- 索引的優化
- 表結構的優化
- 事務優化
- 系統配置優化
- 物理機的優化
- SQL語句的優化
a. 盡量使用select 字段名,不要使用select *,select *不能使用索引覆蓋。只查需要用到的列。
b. 小表驅動大表。主查詢 in/exists 子查詢.
ⅰ. in 先執行右邊的子查詢再執行主查詢。in 適用于左邊大表,右邊小表。
ⅱ. exists 先執行左邊的主查詢然后執行子查詢。exists 適用于左邊小表,右邊大表
ⅲ. 核心是先查小表,再查大表
c. 使用 join 代替子查詢,join不要連接過多的表
d. insert update delete 數據時,批量進行操作。不要循環,一條條的插入
e. 多用limit,減少不必要的查詢和返回。
f. 使用group by時,首先使用where 減小數據量,分組時效率會高 - 索引的優化
a. explain 查看執行計劃,看是否走索引。
b. select \order by 字段使用索引
c. 控制索引的數量,阿里規約:一個表5個索引,并且單個索引中的字段數不超過5個。因為insert update delete操作需要維護索引。
d. 聯合索引時,遵守最左匹配原則
e. 不在索引列上進行計算、函數 - 表結構的優化
a. 合理的表結構
b. 適當冗余
c. 盡量使用not null字段。null 字段會多使用一個字節來記錄是否為null。
d. 合理的字段類型。
ⅰ. 盡量選擇數字類型,因為數字的處理速度快于字符串的處理速度
ⅱ. 盡可能使用小的類型,比如:用bit存布爾值,用tinyint存枚舉值等
ⅲ. 長度固定的字符串字段,用char類型
ⅳ. 長度可變的字符串字段,用varchar類型
ⅴ. 金額字段用decimal,避免精度丟失問題 - 事務優化
a. 避免長事務
b. 減少鎖定的時間長度和資源數 - 系統配置優化
a. 慢查詢默認是關閉的,生產環境需要關閉,開發環境打開,會有一定的性能損耗。開啟的命令set global slow_query_log='ON';
b. 調整redolog的size。這個size小了,會導致頻繁的刷盤,效率會降低。InnoDB特有的。 - 物理機的優化
a. 更大的內存、磁盤(高速讀寫)、網絡帶寬、CPU
本文來自博客園,作者:永恒&,轉載請注明原文鏈接:http://www.rzrgm.cn/Sun-yuan/p/18011060

浙公網安備 33010602011771號