永发信息网

SQLSERVER语句 in和exists哪个效率高本人测试证明

答案:2  悬赏:0  手机版
解决时间 2021-02-09 17:14
SQLSERVER语句 in和exists哪个效率高本人测试证明
最佳答案
例如下面两个SQL语句

1 SELECt OrderNo, SiteCode, AreaCode
2 FROM SchedulingProgram
3 WHERe AreaCode IN ( 'P', 'M' ) AND SiteCode IN ( SELECt SiteCode
4 FROM EnvBasicInfo
5 WHERe cityiD = 31 ) AND OrderNo NOT IN (
6 SELECt OrderNo
7 FROM KK_DeliveryinfoTmp )

上面SQL语句IN里面有IN和NOT IN

1 SELECt OrderNo, SiteCode, AreaCode
2 FROM SchedulingProgram
3 WHERe ( AreaCode IN ( 'P', 'M' ) AND SiteCode IN ( SELECt SiteCode
4 FROM EnvBasicInfo
5 WHERe cityiD = 31 )
6 ) AND NOT EXISTS ( SELECt OrderNo
7 FROM KK_DeliveryinfoTmp
8 WHERe KK_DeliveryinfoTmp.OrderNo = SchedulingProgram.OrderNo )

上面的SQL语句IN里面又有NOT EXISTS

这样的情况很难测试同等条件下IN语句和EXISTS语句的效率

还有一个非SARG运算符

在《SQLSERVER企业级平台管理实践》的第424页里提到:

SQLSERVER对筛选条件(search argument/SARG)的写法有一定的建议

对于不使用SARG运算符的表达式,索引是没有用的,SQLSERVER对它们很难使用比较优化的做法。非SARG运算符包括

NOT、<>、NOT EXISTS、NOT IN、NOT LIKE和内部函数,例如:Convert、Upper等

所以当您的表中有索引并且SQL语句包含非SARG运算符,那么当测试SQL语句的执行时间的时候肯定相差很大,

因为有些SQL语句走索引,有些SQL语句不走索引

建表脚本

注意:两个表中都有索引!!

CT_FuelingData表

1 USE [GPOSDB]
2 GO
3
4 SET ANSI_NULLS ON
5 GO
6 SET QUOTED_IDENTIFIER ON
7 GO
8 SET ANSI_PADDING ON
9 GO
10 CREATE TABLE [dbo].[CT_FuelingData](
11 [RecordNO] [int] IDENTITY(1,1) NOT NULL,
12 [I_FD_StationNo] [int] NOT NULL,
13 [VC_FD_No] [varchar](50) NOT NULL,
14 [VC_FD_Cardno] [varchar](50) NOT NULL,
15 [I_FD_CardStatus] [int] NULL,
16 [LI_FD_CTC] [bigint] NOT NULL,
17 [I_FD_TypeCode] [int] NULL,
18 [I_FD_PumpID] [int] NOT NULL,
19 [VC_FD_OilType] [varchar](50) NULL,
20 [DE_FD_Volume] [decimal](18, 2) NULL,
21 [DE_FD_Price] [decimal](18, 2) NULL,
22 [DE_FD_Amount] [decimal](18, 2) NULL,
23 [I_FD_Point] [decimal](10, 2) NULL,
24 [D_FD_DateTime] [datetime] NOT NULL,
25 [VC_FD_GroupNo] [varchar](50) NULL,
26 [D_FD_GroupDate] [datetime] NULL,
27 [DE_FD_CardAmount] [decimal](18, 2) NULL,
28 [DE_FD_VolumeTotals] [decimal](18, 2) NULL,
29 [DE_FD_AmountTotals] [decimal](18, 2) NULL,
30 [I_FD_ISSend] [int] NULL,
31 [VC_FD_CardMoneyauthFile] [varchar](50) NULL,
32 [D_Month] [datetime] NULL,
33 CONSTRAINT [PK_CT_FuelingData_1] PRIMARY KEY CLUSTERED
34 (
35 [VC_FD_No] ASC
36 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
37 ) ON [PRIMARY]
38
39 GO
40 SET ANSI_PADDING OFF

CT_InhouseCard表
1 USE [GPOSDB]
2 GO
3
4 SET ANSI_NULLS ON
5 GO
6 SET QUOTED_IDENTIFIER ON
7 GO
8 SET ANSI_PADDING ON
9 GO
10 CREATE TABLE [dbo].[CT_InhouseCard](
11 [RecordNO] [int] IDENTITY(1,1) NOT NULL,
12 [VC_IC_CardNO] [varchar](50) NOT NULL,
13 [VC_IC_PhysicalNO] [varchar](50) NULL,
14 [I_IC_CardType] [int] NULL,
15 [VC_IC_UserName] [varchar](50) NULL,
16 [VC_IC_JobNO] [varchar](50) NULL,
17 [VC_IC_UserID] [varchar](50) NULL,
18 [VC_IC_Password] [varchar](50) NULL,
19 [DE_IC_CardAmount] [decimal](18, 2) NULL,
20 [DE_IC_AppendAmount] [decimal](18, 2) NULL,
21 [DE_IC_ConsumerAmount] [decimal](18, 2) NULL,
22 [I_IC_ISLost] [int] NULL,
23 [D_IC_UsedDateTime] [datetime] NULL,
24 [D_IC_UselifeDateTime] [datetime] NULL,
25 [I_IC_IssueStationNO] [int] NULL,
26 [VC_IC_IssuerNO] [varchar](50) NULL,
27 [D_IC_IssueDateTime] [datetime] NULL,
28 [D_IC_LastUpdateDateTime] [datetime] NULL,
29 [I_IC_CardStatus] [int] NULL,
30 [VC_IC_Remark] [varchar](256) NULL,
31 CONSTRAINT [PK_CT_InhouseCard] PRIMARY KEY CLUSTERED
32 (
33 [VC_IC_CardNO] ASC
34 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
35 ) ON [PRIMARY]
36
37 GO
38 SET ANSI_PADDING OFF
全部回答
最近很多人讨论in和exists哪个效率高,今天就自己测试一下 我使用的是客户的数据库gposdb(已经有数据) 环境:sqlserver2005 windows7 我的测试条件:两个表作连接根据vc_ic_cardno字段,查出ct_inhousecard表中的vc_ic_cardno(卡号)在ct_fuelingdata表中存在的记录 前提:某些人可能在sql语句中有多个in,或者多个exists,这些情况很难测试效率的,因为大家的条件都不相同
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
红蜻蜓歌厅地址在什么地方,我要处理点事
肠系膜区脂肪间隙欠清
春之声歌厅地址在什么地方,想过去办事
联发臻品1号楼我想知道这个在什么地方
石子的级配、压碎指标.风化石多少,对混凝土有
输入puk号码了然后还要输入新pin四位码不对怎
求主角冷血没有感情的小说
关于P型半导体的问题
银河歌厅地址在哪,我要去那里办事
mount和mountain的具体区别是什么呢,包括海
福建万丰革业有限公司这个地址在什么地方,我
腿膝盖疼的原因有哪些
CAD2014及天正T20,制图中用异形柱成的块,点
板城烧锅兰柔酒有奖吗
音画时尚KTV地址在哪,我要去那里办事
推荐资讯
方圆房屋介绍所地址在什么地方,我要处理点事
【草书行书楷书隶书哪一种是起源】草书、行书
select 语句中能不能用三个and啊 急 在线等
360的董事长周鸿和以前有个叫周鸿炜的是一个
省监察厅家属院这个地址在什么地方,我要处理
1800瓦功率12伏电压要用多大的线?
为什么我的qq好友可以在附近的人里面找到我
李麟蔬菜瓜果超市怎么去啊,有知道地址的么
生化危机3 吉尔在教堂被救后,自己去公园墓地
简述电子商务的交易模式有哪些。
桂味佳水饺在哪里啊,我有事要去这个地方
对于地面绞车基础的施工,由于是大体积混凝土
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?