经常可以遇到这种情况:用不同的SQL写法可以达到同样的目的。爱钻牛角尖的人就想搞明白,诚然结果一样,但到底孰优孰劣?下面是我列出的一些,请兄弟们赐教。也请兄弟们将你们遇到的类似问题一并列出。
(1)一次插入多条数据时:
CREATE TABLE tb(ID int, 名称
NVARCHAR(30), 备注 NVARCHAR(1000))
INSERT tb SELECT
1,'DDD',1
UNION ALL SELECT 1,'5100','D'
UNION ALL SELECT 1,'5200','E'
也可以这样:
CREATE TABLE tb1(ID int, 名称 NVARCHAR(30), 备注 NVARCHAR(1000))
INSERT TB1 (ID,名称,备注)VALUES(1,'DDD',1)
INSERT TB1
(ID,名称,备注)VALUES(1,'5100','D')
INSERT TB1
(ID,名称,备注)VALUES(1,'5200','E')
_________________________________
上面两种方法,哪种方法效率高?
根据我的认识,第二种方式效率会高些。因为union运算本身会做一个向中间表插入的操作。所以每一种方式执行步骤为:
执行完多个union操作,再执行多条数据插入操作
第二的方式只执行了多条数据插入操作,所以效率较高
(2)赋值时:
SELECT @a=N'aa'
SET @a=N'aa'
_________________________________
上面两种方法,哪种方法效率高?
感觉一样,只不过select可以多个变量同时赋值
(3)取前几条数据时
set
ROWCOUNT 2 select * from tb order by fd
select Top 2
* from tb order by fd
_________________________________
上面两种方法,哪种方法效率高?
我的看法是第二种效率较高,意思比较明确。记得好像是官方推荐的用法。
我对第一种方式的理解是:先写语句告诉引擎以后的语句我只要两条结果。之后又执行了select语句。微软有没有对这种情况做优化我不得而知。但select top
2 微软肯定做了优化,所以一点可以肯定第二种方工的效率肯定不会比第一句低
(4)条件判断时
where 0<(select count(*) from tb where ……)
where
exists(select * from tb where ……)
_________________________________
上面两种方法,哪种方法效率高?
第二种会好些。exists一旦获取一条符合条件的结果便返回结果true,只有结果为false的时候才会扫描整个表。而第一种则无论表中记录状况如何都需对整个表进行扫描。
(5)NULLIF的使用----->同理它的反函数ISNULL的使用
update tb set
fd=case when fd=1 then null else fd end
update tb
set fd=nullif(fd,1)
_________________________________
上面两种方法,哪种方法效率高?
语句好像书解有误??
如果语句是这样的话:
update
tb set fd=case when fd is null then 1 else fd end
update tb set fd=isnull(fd,1)
感觉效率差不多,有机会测试下
(6)从字符串中取子字符串时
substring('abcdefg',1,3)
left('abcderg',3)_
________________________________
上面两种方法,哪种方法效率高?
left更专业些有优势吧
(7)EXCEPT和Not in的区别?
except没用过,感觉应该一样,都需要做逐行扫描,性能都比较低~~
(8)INTERSECT和UNION的区别?
intersect没用过没有发言权
以上这些答案完全凭经验,没有经过测试,如有错误欢迎指出....
分享到:
相关推荐
今天根据经验总结一些高级查询(SQL)及SQL效率优化,有时同样能达到查询效果,但也许系统所耗费的资源可能有很大差异,由于SQL书写的影响,同一功能同一性能不同写法SQL的影响。下面是sql语句优化的一些提示要点,...
泛微系统中常见的主要基于SQL server相关的SQL语句大全, 其中包括组织架构相关SQL,流程相关SQL以及其他自定义需求; 效率排名,等SQL总数将近百;
但是,实际开发中,某些SQL语句的写法会导致用不到并行,从而影响到SQL的执行效率 所以,本文要表达的是:我们要利用好并行,不要让一些SQL的写法问题“抑制”了并行,让我们享受不了并行带来的快感 关于SQL ...
sql优化规则详解(一些小总结) 从sql语句的写法来描述如何提高效率
2.3.2 获取SQL的各种详细信息 29 2.4 本章总结延伸与习题 32 2.4.1 总结延伸 32 2.4.2 习题训练 33 第3章 循规蹈矩——如何读懂SQL执行计划 34 3.1 执行计划分析概述 35 3.1.1 SQL执行计划是什么 35 3.1.2 ...
直至无法产生新的输出或搜索限额满→对 输出的SQL语句进行过滤,选出具有不同执行计划的SQL语句(即不同的执行效率)→对得到的SQL语句进行批量测试,找出性能最好的SQL语句。图2 优化前的SQL语句 自动优化实例 假设...
2.3.2 获取SQL的各种详细信息 29 2.4 本章总结延伸与习题 32 2.4.1 总结延伸 32 2.4.2 习题训练 33 第3章 循规蹈矩——如何读懂SQL执行计划 34 3.1 执行计划分析概述 35 3.1.1 SQL执行计划是什么 35 3.1.2 ...
分享的关于Oracle SQL优化的典型案例分析,在应有系统开发初期,由于数据库数据较少,对于sql语句各种写法的编写体现不出sql的性能优劣,随着数据的不断增加,出现海量数据,劣质sql与优质sql在执行效率甚至存在百倍...
保证数据库性能的sql语句写法,注意事项,使得我们在书写时避免使数据库低效率的执行命令
高级sql讲解课程,SQL写法的优化,提高效率
为了到达同样的目的,sql语句可以有很多种写法,往往选择一种最效率的语句,是非常重要的。
收集整理的sql重要及不常用语句 INSERT 语句用来在表或视图中添加新的行。在视图中插入一个新行也会在 视 图基于的表中插入这一行。 ● 使用 VALUES 子句为一行或多行指定列数据。例如: INSERT INTO staff VALUES ...
这是2016年8月份上海MOORACLE大会上陈宏义老师(老K)分享的一个案例,将一个merge SQL,通过改写成plsql的方式,大大提高了执行效率。 老虎刘在看到这个案例的时候,开始没有注意到执行计划里面显示的各表实际记录数...
1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行...
很适合开发人员在编写SQL时注意,这里虽然说是Oracle的优化,其实,很多是标准SQL需要注意的写法。具有非常高的共通性。 1.选用适合的ORACLE优化器 2.HERE子句中的连接顺序 3.通过内部函数提高SQL效率 4.EXISTS与IN...
同一功能同一性能不同写法SQL的影响 Select * from zl_yhjbqk Select * from dlyx.zl_yhjbqk(带表所有者的前缀) Select * from DLYX.ZL_YHJBQK(大写表名) Select * from DLYX.ZL_YHJBQK(中间多...
逻辑查询优化就是通过SQL等价变换提升查询效率,直白一点就是说,换一种查询写法执行效率可能更高。物理查询优化则是通过索引和表连接方式等技术来进行优化。当谈到通过索引去优化SQL查询效率,首先我们需要知道创建...
找到这个关系以后我们就不难写sql了 update S_USER set account=p.account from S_PERSON p where p.id=S_USER.person_id; 结果为: sqlserver as 语法举例 1、使用表名称别名 有两个表分别是:”Persons”
而Access与 SQL Server各有各的代码写法,对于后期的代码移植也造成不便。Socut.Data.dll则是经常很多代码优化、整理和归纳出的一个通用的数据库操作类,Access与SQL Server两种数据库同写一种代码。这个类写成组件...