基本原则
- 数据库范式和反范式相结合(适当冗余字段, 比如记录的count字段)
- 避免全表扫描(where子句中少用is null,!=,<>,or,in), 合理添加索引(比如关联表id和常用搜索字段加)
- 大表拆分(比如热数据与冷数据分离, 大的字段单独出来)
- 使用合理的类型添加字段
- 使用查询缓存(比如常用查询赋值给变量)
- 避免 SELECT *, 尽量只返回需要的字段, order by时
select 一个索引 where 一个索引
会使用索引否则使用filesort
- 加上自增id
- 尽可能的使用 NOT NULL
- 拆分大的delete或insert语句
- 合理使用Query Cache(比如频繁cud不适合,消耗很大的查询适合)
- 尽可能避免复杂的Join 和子查询
- 永远用小结果集驱动大的结果集(过滤时先选出数据少的)
- where字句按索引字段少的在前面(顺序决定了查询分析器是否使用索引查询)
- 大量写入时可以考虑完全写入再加索引
- 适当建立冗余表, 比如缓存表或汇总表
索引策略
- 独立的列: 使用where时始终将索引列单独放在比较符号的一侧
- 模拟哈希索引: 当索引字段很大时可以新建该列哈希值用于检索
- 前缀索引和索引选择性: 索引开始部分字符,尽量少的索引值
- 合适的索引顺序: 不需要排序和分组时,选择性最高的列放在前面
- 合适的多列索引和联合索引