1. 優化更需要優化的SQL
高并發低消耗 > 低并發高消耗
2. 定位性能瓶頸
profiling
3. 明確的優化目標
4. 從explain入手
y
5. 小結果集驅動大結果集??
Join操作
6. 在索引中完成排序
7. 只取出自己需要的columns
MySQL有兩種排序算法,盡可能使用只訪問一次數據的算法。
8. 僅僅使用最有效的過濾條件
索引鍵長度?
9. 避免復雜的join和子查詢
充分利用EXPLAIN和profiling
profiling的使用:
1.set profiling = 1;
2.執行SQL;
3.show profile;
4.show profile [cpu, block io] for query [id];
mysqlslap 測試sql性能
mysqlslap --concurrency=5 --iterations=500 --query="selec
t * from hbe_hotel" --create-schema=phoenix -uroot -p
合理設計并使用索引
Mysql支持的索引類型:
1. B-tree索引 除了Archive的存儲引擎都支持
2. Hash索引 memory和NDB支持
3. Full-text索引 MyISAM,分詞后建立B-tree索引
4. R-tree索引 MyISAM ,GIS系統使用
索引的利弊
利:提高數據檢索效率和排序、分組效率
弊:加大更新操作的資源消耗,增加存儲空間的消耗
如何判斷是否需要使用索引
1. 使用較頻繁的字段應該創建索引
2. 唯一性太差的字段不建索引 經驗值:15%
3. 更新非常頻繁的字段不建索引
4. where子句中不出現的字段不建索引
單鍵索引還是組合索引?
多方考慮,平衡優劣
技術人員如何證明一個需求是否合理?
1. 每次PD提出新需求的時候,要求給出該項目預期收益的量化指標。
2. 在項目進行中,詳細記錄所有資源投入,包括人力、硬件等。
3. 項目上線后收集數據統計實際收益值。
4. 相關部門盡可能設計出項目投入/產出比率的計算規則,將投入/產出比公布給參與項目的所有人員。
5. 比較實際的投入/產出比與預期值,以判定項目做的是否值得。