书写高质量SQL的30条建议

  1. 查询SQL尽量不要使用select *,而是select具体字段。

  1. 如果知道查询结果只有一条或者只要最大/最小一条记录,建议用limit 1。

  1. 应尽量避免在where子句中使用or来连接条件。

  1. 优化limit分页。

  • 优化方案一,返回上次最大查询记录(偏移量),这样可以跳过偏移量,效率提升不少。

  • 方案二使用order by+索引,也是可以提高查询效率的。

  1. 优化你的like语句。避免 like '%' 开头。

  1. 使用where条件限定要查询的数据,避免返回多余的行。需要什么数据,就去查什么数据,避免返回不必要的数据,节省开销。

  1. 尽量避免在索引列上使用mysql的内置函数。主要包括字符串函数、数字函数、日期函数、高级操作的函数等。

  1. 应尽量避免在where子句中对字段进行表达式操作,这将导致系统放弃使用索引而进行全表扫描。

  1. Inner join 、left join、right join,优先使用Inner join,如果是left join,左边表结果尽量小。

  1. 应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

  1. 使用联合索引时,注意索引列的顺序,一般遵循最左匹配原则。

  1. 对查询进行优化,应考虑在where及order by涉及的列上建立索引,尽量避免全表扫描。

  1. 如果插入数据过多,考虑批量插入。

  1. 在适当的时候,使用覆盖索引。

  1. 慎用distinct关键字。在查询一个字段或者很少字段的情况下使用时,给查询带来优化效果。但是在字段很多的时候使用,却会大大降低查询效率。

  1. 删除冗余和重复索引

  1. 如果数据量较大,优化你的修改/删除语句。

  1. where子句中考虑使用默认值代替null。

  1. 不要有超过5个以上的表连接

  • 连表越多,编译的时间和开销也就越大。

  • 把连接表拆开成较小的几个执行,可读性更高。

  • 如果一定需要连接很多表才能得到数据,那么意味着糟糕的设计了。

  1. exist & in的合理利用.

select * from A where deptId in (select deptId from B);

如果B的数据量小于A,适合使用in,如果B的数据量大于A,即适合选择exist

  1. 尽量用union all替换 union.

  1. 索引不宜太多,一般5个以内。

  1. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型

  1. 索引不适合建在有大量重复数据的字段上,如性别这类型数据库字段。

  1. 尽量避免向客户端返回过多数据量。

  1. 当在SQL语句中连接多个表时,请使用表的别名,并把别名前缀于每一列上,这样语义更加清晰。

  1. 尽可能使用varchar/nvarchar 代替 char/nchar。

  1. 为了提高group by 语句的效率,可以在执行到该语句前,把不需要的记录过滤掉。

  1. 如果字段类型是字符串,where时一定用引号括起来,否则索引失效

  1. 使用explain 分析你SQL的计划.

注:内容源自公众号: 捡田螺的小男孩。在此只做笔记使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值