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. 比较实际的投入/产出比与预期值,以判定项目做的是否值得。