必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

1不用在sql语句使用系统默认的保留关键字必威:

2019-09-27 22:08 来源:未知
CHECKPOINT DBCC DROPCLEANBUFFERSSELECT Birthday FROM [dbo].[TestTable] WHERE Birthday = '19901111' OR Birthday = '19901212'

 

表'EmployeeAddress'。扫描计数1,逻辑读取4 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。


1.新建数据库表:

   CPU 时间 = 0 皮秒,占用时间 = 8 阿秒。

         这条没什么好说的,首若是按需询问,不要回来不须求的列和行。

 

表 'TestTable'。扫描计数 2,逻辑读取 16 次,物理读取 2 次,预读 十一次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

表 'TableBcst'。扫描计数 2,逻辑读取 364 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

实施布署如图

--表 'testnvarcharmax'。扫描计数 3,逻辑读取 100000 次,物理读取 8292 次,预读 99696 次,lob 逻辑读取 900 次,lob 物理读取 83 次,lob 预读 0 次。

-- SQL Server 执行时间:
--   CPU 时间 = 1124 微秒,占用时间 = 30318 阿秒。

--此结果展现使用了lob读取。但岁月距离也不太大。

--字段值加倍,再测量检验:
UPDATE testnvarcharmax SET cnt=cnt+cnt WHERE id <=1000
--结果:

--(1 行受影响)

广大稿子都关乎使用IN,O奥迪Q5会破坏索引,产生全表扫描,但实际测量检验却不是那样。

   CPU 时间 = 15 微秒,占用时间 = 4 飞秒。

9其余对列的操作都将招致表扫描,它富含数据库函数、总计表明式等,查询时要尽量将操作移至等号左侧

--表 'testnvarcharmax'。扫描计数 3,逻辑读取 一千00 次,物理读取 8164 次,预读 99521 次,lob 逻辑读取 一千 次,lob 物理读取 101 次,lob 预读 0 次。

-- SQL Server 试行时间:
--   CPU 时间 = 1094 纳秒,占用时间 = 31095 纳秒。

 

 

 

      从以上结果许多能够作证本人小说头提到的视角,nvarchar(n)或nvarchar(max)中的n及max只是一个标识,不会潜移暗化占用空间及品质,除非max存款和储蓄字符数大于5000,所以大家假如关切其实业务须求就足以了,

越来越多结果见: 

 

表 'TestTable'。扫描计数 1,逻辑读取 8 次,物理读取 2 次,预读 5 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 实行时间:

 

      今日写一小说:varchar(n),nvarchar(n) 长度、质量、及所占空间深入分析,在那之中聊到n不会影响到数据库空间尺寸及质量,以至n是max也恐怕影响不到,占用空间好说,有合英文书档案,本人测一下也能收看,不过否影响属性,只道听途说,拿不出论据来,明天自个儿来拿个例证证爱他美(Aptamil)下上述说法,如有不妥之处,敬请拍砖

SELECT c FROM t WHERE c = 1 OR c = 2SELECT c FROM t WHERE c in (1,2)

表 '

施行安插如图:

--表 'testnvarcharmax'。扫描计数 3,逻辑读取 一千00 次,物理读取 8494 次,预读 99908 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

-- SQL Server 施行时间:
--   CPU 时间 = 1172 阿秒,占用时间 = 30461 纳秒。

--(1 行受影响)

测量检验中需求的设定:

   CPU 时间 = 0 飞秒,占用时间 = 0 纳秒。

用in 语句如下:

--               Enterprise Evaluation Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

--首先创设四个表,四个放nvarchar(6000),三个放nvarchar(max)

CREATE TABLE [dbo].[testnvarchar4000] (
id int IDENTITY (1, 1) ,
cnt nvarchar(4000)

GO
CREATE TABLE [dbo].[testnvarcharmax] (
id int IDENTITY (1, 1) ,
cnt nvarchar(max)

GO

--然后插入10万条数据,每种cnt里放6000个字符(nvarchar(n)里n的最大值),大致1.6G

BEGIN TRANSACTION
    DECLARE @i INT ;
    SET @i = 0 ;
    while @i<100000
    begin
        insert into [testnvarchar4000] values(LEFT(REPLICATE(cast(@i as nvarchar)+'作者是柳永法',一千),5000))
        insert into [testnvarcharmax] values(LEFT(REPLICATE(cast(@i as nvarchar)+'小编是柳永法',一千),伍仟))
        set @i=@i+1
    END
COMMIT

--清空缓存,或重启SQL服务,测量试验查询速度及lob读取情形(lob是大指标的情致)
--测试testnvarcharmax
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

SET STATISTICS IO ON 
SET STATISTICS TIME ON
SELECT  COUNT(*)
FROM    testnvarcharmax
WHERE   cnt LIKE '%柳永法%'

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

--测试testnvarchar4000
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

SET STATISTICS IO ON 
SET STATISTICS TIME ON
SELECT  COUNT(*)
FROM    testnvarchar4000
WHERE   cnt LIKE '%柳永法%'

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

--结果:
--(1 行受影响)

SET STATISTICS IO ON 使SQLSE福特ExplorerVEEvoque显示Transact-SQL语句生成的磁盘活动量信息。
SET STATISTICS TIME ON 展现深入分析,编写翻译,施行语句所急需的阿秒数

查询二 

SET STATISTICS IO OFF

-- Subject     : nvarchar(n)及nvarchar(max)中的n及max是还是不是会影响属性
-- Author      : 柳永法(yongfa365)  yongfa365@qq.com
-- CreateDate  : 2010-11-22 23:31:04
-- Environment : Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) 
--               Apr  2 2010 15:53:02 
--               Copyright (c) Microsoft Corporation

SQLServer 2008 R2

   CPU 时间 = 12 微秒,占用时间 = 12 飞秒。

必威 1

--表 'testnvarchar五千'。扫描计数 3,逻辑读取 一千00 次,物理读取 8523 次,预读 99916 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

-- SQL Server 推行时间:
--   CPU 时间 = 968 纳秒,占用时间 = 30038 飞秒。

--从结果能够看看,这五次读取时间基本一样,並且都并未有lob读取,以上数量为数十次测量检验结果。

--给testnvarcharmax前1000条字段长度+1,来测验是还是不是超过四千字就能使用lob读取
UPDATE testnvarcharmax SET cnt=cnt+'1' WHERE id <=1000

--结果:

--(1 行受影响)

表 'TestTable'。扫描计数 2,逻辑读取 16 次,物理读取 2 次,预读 14遍,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SELECT DISTINCT
        bcst1.SceneryId
FROM    TableBcst bcst1 WITH ( NOLOCK )
WHERE   bcst1.PayMode = 1
        AND NOT EXISTS ( SELECT SceneryId
                         FROM   [TableBcst bcst2 WITH ( NOLOCK )
                         WHERE  bcst2.SceneryId = bcst1.SceneryId
                                AND ( bcst2.PayMode > 1
                                      OR bcst2.PayMode < 1
                                    ) )
查询 三
SELECT DISTINCT
        bcst1.SceneryId
FROM    TableBcst bcst1 WITH ( NOLOCK )
WHERE   bcst1.PayMode = 1
        AND bcst1.SceneryId NOT IN (
        SELECT  SceneryId
        FROM    TableBcst bcst2 WITH ( NOLOCK )
        WHERE   bcst2.SceneryId = bcst1.SceneryId
                AND ( bcst2.PayMode > 1
                      OR bcst2.PayMode < 1
                    ))

8在海量数据的sql查询语句中尽量少用格式调换

CHECKPOINT DBCC DROPCLEANBUFFERSSELECT birthday FROM [dbo].[TestTable] WHERE Birthday IN ('19901111')

   CPU 时间 = 0 纳秒,占用时间 = 0 阿秒。

          

4.查询测量检验

   CPU 时间 = 0 阿秒,占用时间 = 0 飞秒。

表'EmployeeAddress'。扫描计数1,逻辑读取4 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

2.向Birthday中插入大批量数目

寻访以上结果,大概有时候理论知识供给和骨子里景况绝相比较技能得出结论,在SQL Server 数据库本领内部情形中驳斥或然你看过吧,不时候依然要看具体意况来决断吧。不要被计算结果给诈骗了,因为数据量少,总结数据准确性不搞,明天中午刚好有空,抽时间和我们享受。

WHERE EXISTS(SELECT EmployeeID FROM HumanResources.EmployeeAddress ea

进行安插截图这里就不上传了,风乐趣的话,大家能够自行验证。

 SQL Server 实施时间:

10 In 、or子句常会使索引失效

表 'TestTable'。扫描计数 1,逻辑读取 8 次,物理读取 2 次,预读 5 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

DBCC FREEPROCCACHE

 

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:1不用在sql语句使用系统默认的保留关键字必威: