数据库设计优化
- 适度违反三大范式
遵循三大范式后续查询经常使用join,导致查询效率降低,结合业务需求适当做数据冗余。 - 适度建立索引
建立索引规则:
a.索引的字段必须是经常用来作为查询条件的字段,where
b.如果是多个字段的情况,第一个字段要是经常作为查询条件的
c.索引的字段必须有足够的区分度 - 对表进行水平划分
每年产生100万条数据,按年或月对数据进行区分建表 user_2016,user_2017 - 对表进行垂直划分
某张表中有很多字段,或某个字段很长,IO消耗大,根据业务需求适当划分为多个表 - 选择适当字段类型
- 宁可集中批量操作也不可频繁读写
- 选择合适的引擎
- 字段数据类型的选择,能使用数字型字段的尽量使用数字型
- 尽量避免大事物操作,索引优化
SQL语句优化
- 慢日志、explain
- 【避免全表扫描】,考虑在where和order by 子句中建立索引
- 尽量避免在where子句中使用null,会放弃索引,进行全表扫描
- 尽量避免在where子句中使用运算符(!=、<>)或函数(year())
- 避免使用or,会走全表扫描,union all
- 能使用between就不要使用in
- like尽量避免使用%%,不会走索引,D%会走索引
- 查询时尽量避免使用select *,仅列出需要查询的字段
- join的操作,小结果驱动大结果
- 分页查询时,基数比较大时,不要使用limit,尽量换成between
- 连接类型 效率从高到低,建议不小于range systme>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all