SQL优化

提升效率
  • 查询时,先将数据从数据库查出来,然后再做函数处理,尽量减少占用数据库连接(事务)的时间
  • 若数据量比较少,不超过100条记录,不需要使用索引
  • where条件及orderBy字段上建立索引,但一张表中最多不能超过6个索引
  • union all会查询出相同的记录,而且不对结果集进行排序;union 会过滤掉重复的数据,而且按照字母的顺序排序(自然排序),性能较union all差;如果确定查询结果不重复且对顺序没有要求,使用union all效率高许多
  • 若表中索引为复合索引,那么作为where条件的第一个字段须是复合索引的第一个字段,若where条件不使用复合索引的第一个字段,则不会使用该索引,会导致全表扫描
  • Student表中仅存在一个由三个列name,age,address组成的复合索引, where条件中只是用到了name,address两个过滤条件,那么只有name这一列应用到了该复合索引
  • 若表中存在大量重复数据,例如sex列,malefemale几乎各占一半,不会使用索引,应当把索引建立在区分度比较高的列
  • clustered索引列插入一条记录,将引起全表数据顺序的调整,耗费相当大的资源
  • 尽量使用数字类型列,因为执行引擎在执行连接和查询时,对于数字类型只需要比较一次,而字符类型要从首字母开始匹配。
  • 尽量避免向客户端输出大量数据,或者存在大事务操作,以提高系统的并发能力
避免以下引起全表扫描的语句
  • where条件中存在=null判断
  • 前置%not in的使用
  • where条件中使用函数或者表达式计算
  • where条件使用or分割条件,若其中一个条件没有使用索引,那么被or连接的多个条件都不使用索引,执行全表扫描
阅读更多
文章标签: SQL
个人分类: Database
上一篇Spring AOP 中propagation的配置
下一篇Docker容器中文乱码
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭