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