关于sql语句效率的问题
时间:2011-12-24
来源:互联网
SQL code
select i.* from #wh_Stock_2 as i where (i.lister in (select TargetName from t_user_Permission_Target))
数据少了,倒没有什么关系,如果数据多了,速度就会比较慢的,因为我在sql语句里用到了 in,这样效率会比较慢,但是,我又必须这样做,我才能得到我想要的结果,问题是,有没有其它SQL语句的写法,我这个sql语句写意思是我要在#wh_Stock_2 的数据里当字段lister在表的t_user_Permission_Target.TargetName,有数据就取出来,这段语句很好理解的。我想既不影响速度,又得到我想的结果?
如何改一下这个sql语句?
作者: fstao 发布时间: 2011-12-24
from #wh_Stock_2 as i
where
EXISTS (select 1 from t_user_Permission_Target WHERE i.lister=TargetName )
t_user_Permission_Target 这个表的 TargetName 有索引没?
作者: SQL777 发布时间: 2011-12-24
CREATE TABLE [dbo].[t_user_Permission_Target](
[UserName] [varchar](50) NOT NULL,
[TargetName] [varchar](50) NOT NULL,
[Permission] [int] NOT NULL,
[Remark] [varchar](50) NULL,
[id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_t_user_Permission_Target] PRIMARY KEY NONCLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 70) ON [PRIMARY]
) ON [PRIMARY]
作者: fstao 发布时间: 2011-12-24
select i.*
from #wh_Stock_2 as i
where
EXISTS (select 1 from t_user_Permission_Target WHERE i.lister=TargetName )
t_user_Permission_Target 这个表的 TargetName 有索引没?
TargetName 设置什么索引?
作者: fstao 发布时间: 2011-12-24
作者: kuqideyupian 发布时间: 2011-12-24
作者: fredrickhu 发布时间: 2011-12-24
select i.*
from #wh_Stock_2 as i
where
EXISTS (select 1 from t_user_Permission_Target WHERE i.lister=TargetName )
运行的速度与
select i.*
from #wh_Stock_2 as i
where
(i.lister in (select TargetName from t_user_Permission_Target))
基本是一样的,没什么区别的。
不知道有什么好的方法呢?
作者: fstao 发布时间: 2011-12-24
GO
select i.*
from #wh_Stock_2 as i
where
(i.lister in (select DISTINCT TargetName from t_user_Permission_Target))
GO
SET SHOWPLAN_TEXT OFF
GO
不知道你的具体情况,猜测你应该有重复的,这样试试吧,
数据量与索引都是影响速度的重要原因,
把上述结果帖一下
作者: SQL777 发布时间: 2011-12-24
SET SHOWPLAN_TEXT ON
GO
select i.*
from #wh_Stock_2 as i
where
(i.lister in (select DISTINCT TargetName from t_user_Permission_Target))
GO
SET SHOWPLAN_TEXT OFF
GO
不知道你的具体情况,猜测你应该有……
是不是写错了,应该是这样的吧:
select i.*
from #wh_Stock_2 as i
where
(i.lister in (select DISTINCT 1 TargetName from t_user_Permission_Target))
但是速度还是一样,如果是这样的:
select i.*
from #wh_Stock_2 as i
就1秒不到,690行数据,如果是这样:
select i.*
from #wh_Stock_2 as i
where
(i.lister in (select 1 TargetName from t_user_Permission_Target))
就要10秒时间,select * TargetName from t_user_Permission_Target 数据行数是42行
作者: fstao 发布时间: 2011-12-24
作者: kuqideyupian 发布时间: 2011-12-24
引用 7 楼 sql777 的回复:
SET SHOWPLAN_TEXT ON
GO
select i.*
from #wh_Stock_2 as i
where
(i.lister in (select DISTINCT TargetName from t_user_Permission_Target))
GO
SET SHOWPLAN_TEXT OFF
GO
不知道……
就我那样的,你把结果文本显示一下,
SP_HELPINDEX t_user_Permission_Target 这个结果也帖一下,t_user_Permission_Target这个表的数据量多少?
作者: SQL777 发布时间: 2011-12-24
作者: fstao 发布时间: 2011-12-24
select * from t_user_Permission_Target 数据行数是42行
SQL code
CREATE IDNEX IDX_Stock_2 ON #wh_Stock_2(lister) GO CREATE IDNEX IDX_TargetName ON t_user_Permission_Target(TargetName) GO select i.* from #wh_Stock_2 as i where (i.lister in (select distinct TargetName from t_user_Permission_Target))
帖个结果你也没帖 ..TRY
作者: SQL777 发布时间: 2011-12-24
SQL code
code billcode wh_stock_id .....
N00201112150001
N00201112140019
N00201112140013
N00201112140008
N00201112140004
........
贴不了数据,一共有65列,440行数据
作者: fstao 发布时间: 2011-12-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28