sql优化

 

1.sql语句优化

  1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
  2. 在适当的情况下使用exist和in(主表比子表大时 用in比较合适;主表比子表小时用exist)
  3. 尽量避免使用not in(not in是不能命中索引的)
  4. 用Where子句替换HAVING 子句 因为HAVING 会检索所有记录后对结果集进行过滤
  5. 尽量不要采用* ( 会多出一些不用的列,导致无法使用索引覆盖;增加数据传输的时间;更加严谨;也避免了*转义成字段)
  6. 使用连接(JOIN)来代替子查询(Sub-Queries)
  7. 分页时,数据越到后面查询越慢,最好能进行过滤

2.索引

  1. 尽量使用覆盖索引,避免全表扫描;使用主键索引,避免回表
  2. 建立联合索引,遵守最左原则
  3. 相同类型的字段间进行比较,否则会导致索引失效
  4. 建有索引的字段上尽量不要使用函数进行操作,否则会导致索引失效
  5. like ‘abc%’会走索引 ,而‘%abc%’不会
  6. 索引上最好不要有null值(null值需要占用额外空间;在进行count()统计字段的总数数的时候,如果采用的NULL值,会别系统自动忽略掉)
  7. 尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引
  8. 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能
  9. or 查询改写成 union 查询(or会使索引失效)

3.表结构优化 

  1. 范式结构(消除冗余,节省空间)
  2. 反范式结构(适当冗余,减少关联查询)
  3. 使用可以存下数据的最小类型
  4. 尽可能定义非null字段
  5. 选择合适的存储引擎
  6. 适当的拆分表(水平拆分;垂直拆分)

4.优化手段

  1. 开启慢日志,
  2. 查看执行计划,根据执行计划进行优化
  3. 缓存技术
  4. 服务硬件升级

过早优化是万恶之源,当然也不是不优化

欢迎大家进行补充 

你可能感兴趣的:(面试,mysql,sql,数据库)