MySQL优化这个话题比较“沉重”......
大概可以从以下几个大的方向进行
1:物理机器、MySQL的配置优化(不太了解)
2:逻辑设计
也就是怎么设计表
范式与反范式,有时候为了查询方便可以适当的冗余字段
比如在”标签与帖子关联”表中,冗余一个帖子发布时间和帖子状态字段
方便实现”查询具有某些标签的正常帖子,按照时间倒叙排序”。当然这基于这些字段很少很少更新
单独一个表
比如帖子的相关计数数据:查看量、评论量、点赞量等,这时候可以单独一个表,而非放到帖子表中
这样可以减少对帖子表的影响,也方便计数的业务独立出来
3:选择合适存储引擎和字段类型
要了解常见的存储引擎以及特性,然后根据表的实际应用场景选择。后面单独做个总结吧
要了解MySQL几种数据类型和数据类型占用的字节数
选择原则是:
越小越好,比如,能用tinyint的绝对不用int
越简单越好,比如, 整形比字符串操作代价更小、用内置的时间和日期类型表示日期,而非字符串、IP用整形而非字符串
4:索引优化
索引原理、MySQL索引实现
索引的建立要依据查询的SQL
索引不能太多,尽量建立联合索引,区分度很低的字段不要建立单独的索引
联合索引:最左匹配
全值匹配、匹配最左前缀、匹配列前缀(比如like 'key%’)、匹配范围值(between > <)、只访问索引的查询
order by什么情况下会使用索引
in(1,2,3,4)这种查询如何使用索引
5:查询优化
1:多个简单的单表+索引查询
2:尽量不用join
3:尽量不用子查询,可以用join查询代替(当然最好别用join)
网友评论