优化sql查询

来源:互联网 发布:三菱plc编程软件fx 编辑:程序博客网 时间:2024/06/05 16:08

优化sql查询

如何写出高性能的sql语句

  • 1.什么叫执行计划?
  • 2.统一sql语句写法
  • 3.sql语句尽量简单
  • 4.使用临时表
  • 5.采用绑定变量
  • 6.优化索引

1.什么叫执行计划?

执行计划是数据库根据sql语句和相关表的统计信息坐出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条sql语句如果用来从一个n条记录中查询其中一条,那查询优化器会选择“索引扫描”方式。
该表如果使用了归档,那查询优化器就会改变方案,采用“全表扫描”方式。
执行计划并不是固定的,所以要产生一个正确的“执行计划”要注意:

sql语句是否清晰地告诉查询优化器要干什么?

  1. 查询优化器:负责生成 SQL 语句的有效执行计划的 SQL Server 数据库引擎组件(详解–浅析SQL Server查询优化器的工作原理)
  2. 归档:存储有组织的数据,目的是长时间存放有组织的数据集,确保其将来能够被精细地检索

2.统一sql语句写法

对于以下两句sql语句,程序员认为是相同的,数据库查询优化器认为是不同的

select*from table_name
select*From table_name
其实就是大小写不同,查询分析器就认为是不同的sql语句进行两次解析。所以作为程序员应该保证相同的查询语句在如何地方都一致。

3.sql语句尽量简单

经常看到,我们在进行sql查询的时候有些sql语句非常非常复杂。一般来说这么复杂的语句通常是有问题的。一般,将一个Select语句结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见,但是根据经验。超过3层嵌套,查询优化器很容易给出错误的执行计划,因为它被绕晕了。

4.使用临时表

简化sql语句的重要方法就是采用临时表暂存中间结果。临时表的好处远远不止这些,将临时结果暂时存在临时表,后面的查询就查询临时表了,就避免程序多次扫描主表。

5.采用绑定变量

select*from table_name where time > ‘2016-05-23 09:15:02’
select*from table_name where time > ‘2016-05-25 09:00:00’

以上两句语句,查询优化器认为是不同的sql语句,需要解析两次。如果采用绑定变量

select*from table_name where time > @time
@time变量可以传入任何值,这样大量类似查询可以重用该执行计划这可以大大降低数据库解析sql语句的负担。
一次解析,多次重用,是提高数据库效率的原则

6.优化索引

创建有用的索引是提高查询性能的最重要方法之一。
与大多数性能优化方法一样。此方法也有一些缺点。如:使用较多索引时,SELECT查询运行速度可能会更快。但是DML(INSERT,UPDATE和DELETE)操作的速度将显著减慢,因为对于每个操作都必须维护更多的索引。因此,您的查询主要包含SELECT语句,则使用较多的索引是非常有帮助的,如果程序需要执行许多DML操作,就有必要控制创建的索引数。(详解)

2 0
原创粉丝点击