高效SQL语句(SQL Server)(推荐)_高效的sql语句
高效SQL语句(SQL Server)(推荐)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“高效的sql语句”。
以下的SQL语句以Northwind为例
1、不要再where子句中“=”的左侧使用函数和表达式,因为系统无法应用函数或表达式中的索引
SELECT * FROM Customers WHERE Cast(CustomerID AS VARCHAR(20))='1'--Clustered Index Scan 全表扫描
SELECT * FROM Customers WHERE CustomerID ='1'--Clustered Index Seek 索引扫描
2、只返回必要的行或列
2.1 减少I/O次数
2.2 减少加载到内存的数据量
3、关于组合索引(待定)
组合索引中的顺序很重要,当查询语句中的列只能与组合索引中的第1列相匹配时,才能在查询中应用此索引
4、Distinct语句的使用原则
尽量少用,因为数据库引擎需要花费大量的时间对所有字段进行比较,过滤掉重复的记录,因此影响了查询的效率
字段较少时,可适当采用;较多时,不宜采用
5、Union语句
Union必须满足以下要求:
1、所有select语句的列数必须相同
2、所有select语句中对应列的数据类型必须兼容
执行包含Union的查询语句的过程如下:
1、依次执行所有select语句
2、将所有select语句的结果集合并为一个结果集
3、对结果集进行排序,并过滤掉重复的记录(由于需要第3步的操作,导致联合查询效率很低)可使用union all,不用排序和过滤重复记录,效率高
6、使用存储过程
数据库引擎可以在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。
相对来说,每次运行sql语句时,都要从客户端重复发送,并且在sqlserver每次执行这些语句时,对其进行编译和优化。
7、如果需要多次对一个数据量非常大的表中一部分数据进行查询操作,可以将这部分数据放在临时表中,然后对临时表进行操作。
8、模糊匹配符%和索引的关系
假定有一个表Good,主键为聚集索引,类型为nvarchar(50)
SELECT * FROM Goods AS g WHERE g.GoodsName LIKE '%商品1'--Clustered
Index Scan 全表扫描
SELECT * FROM Goods AS g WHERE g.GoodsName LIKE '商%品1'--Clustered Index Seek 索引扫描
SELECT * FROM Goods AS g WHERE g.GoodsName LIKE '商品1%'--Clustered Index Seek 索引扫描
结论:通配符%放在中间和后面会走索引,放在前面不会
9、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
SELECT * FROM Employees AS e WHERE e.EmployeeID =1--走聚集索引
SELECT * FROM Employees AS e WHERE e.EmployeeID IS NULL--Constanct Scan10、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
11、在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON,在结束时设置 SET NOCOUNT OFF。无需在执行存储过程和触发器的每个语句后向客户端发送
DONE_IN_PROC 消息。
1.SELECT子句中避免使用 “*”当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 „*‟ 是一个方便的方法.不幸的是,这是一个非常低效的方法.实际上,ORACLE在解析......
如何写高效率的SQL语句、Where子句中的连接顺序:ORACLE采用自下而上的顺序解析WHERE子句。根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录......
QL Server 2000/2005 分页SQL — 单条SQL语句有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,......
SQL练习一、设有如下的关系模式, 试用SQL语句完成以下操作:学生(学号,姓名,性别,年龄,所在系)课程(课程号,课程名,学分,学期,学时)选课(学号,课程号,成绩)1. 求选修了课程号为“C2”课的......
简单基本的sql语句 几个简单的基本的sql语句选择:select * from table1 where范围插入:insert into table1(field1,field2) values(value1,value2)删除:delete from table1 whe......
