1. 表设计要兼顾3nf跟性能,特殊时候可弃3nf保性能
2. 字段类型要选和用的占用空间小的,能用定长就用定长
3. 避免null,null可索引,但处理较not null复杂
4. 根据查询条件跟区分度设计索引
5. 复合索引遵循leftmost规则,使用的时候不遵循leftmost可导致复合索引中部分索引失效
6. 考虑覆盖索引,极大提高性能,让查询从索引中获取所有结果
7. innodb非主索引存放主键值,取得主键值再查询聚集索引
8. Myisam索引存放数据记录指针
9. 复合索引设计不一定把区分度最高的列放前面。range小的列放前面,可让复合索引使用的时候能使用更多的索引
10. order by,group by, distinct需要排序,排序是个费时操作,尽量通过索引避免
11. mysql的子查询应该同join方式比较,看哪个性能更高。
12. limit s, offset 必须用explain然后优化
13. join全是nested loop,通常驱动表记录要少,连接列上最好有索引(特别是非驱动表)
14. sql的优化,explain是少不了的
15. 需要事务选innodb, myisam开启并发插入
16. select 不加锁
17 RR级别mysql可防止幻读(MVCC+GAP)
18 读压力大,可使用读写分离(mysql proxy, 变形虫). 时延跟事务是跟问题
19. 写压力大,采用复制是无效的。可采用切分(垂直切分,水平切分),将表分布到多个数据库中或将大表切分到多个库中,均衡写压力。
20. 使用缓存(memcached,redis等)缓存经常访问的数据。
阅读(1174) | 评论(0) | 转发(0) |