Skip to content

SQL性能优化

对于一些应用系统响应时长较长的情况,可通过数据库跟踪日志,提取应用系统执行SQL,分析SQL执行路径,优化业务逻辑或SQL执行路径,提高SQL执行性能。

  • 针对OLTP与OLAP业务场景,建议建立相应的数据库服务系统,避免OLAP的高资源消耗影响OLTP业务响应效率;编写完SQL语句时,访问SQL需确认是否包含分区键与索引键,并且对SQL语句进行EXPLAIN分析,尽量让所有执行步骤都走索引扫描,避免全表扫描。

  • SQL语句中涉及多表联合JOIN查询时,把重复关联键少的表放JOIN前面做关联可以提高JOIN的效率,因写在关联左侧的表每有1 条重复的关联键时底层就会多1次运算处理这样通过先走小表扫描来裁剪数据可最大限度的降低数据运算规模;数据量最小的表的WHERE条件也尽量放在最靠前位置,原因同前理,优先裁剪重复关联键,降低JOIN数据运算规模。

  • SQL语句中涉及多表联合查询时,关联表上的关联键应创建对应索引。主外键关联时,应保证外键上设计合理的索引;检索数据时可以缩小时间范围,采用多次访问方式,从而提高效率(降低访问数据过大走磁盘扫描的可能性,一旦走磁盘扫描,执行效率相比内存扫描成指数性下降);当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样可以减少解析的时间并减少那些由列歧义引起的语法错误。

  • SELECT子句中避免使用“*”;因在解析的过程中, 会将“*”依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间;并且会返回可能不使用的列数据,加重运算和网络开销;通常情况下如果语句能够避免子查询的使用,就尽量不用子查询,因子查询的开销相当昂贵;若访问数据无特别需求,可减少排序操作提高数据响应效率。