有一个视图查询问题!

mugua604 2008-07-23 05:13:10
有个视图,查询全部的查询时间是1分钟左右
但是加上WHERE条件。视图反而需要3分钟。。。
什么原因呢?
WHERE 条件字段有加上INDEX。。。
...全文
122 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mugua604 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wzy_love_sly 的回复:]
有时候是很怪,估计是和数据的比例有关系,我写between '' and '' 就特慢
写成下面这样就快很多,很邪!

SQL codeselect*fromwheredatediff(d,creatdate,'2008-01-01')<=0anddatediff(d,creatdate,'2008-02-01')>=0


[/Quote]
经过你这段语句我,我测试了一下。。。字段DATE用DATATIME类型效率高很多。。
YOUR RIGHT,
THS
mugua604 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 guoli0813 的回复:]
木瓜老弟,
你的语句

select * from vw_talbe where date>='2008/07/01'

where条件里面是时间和时间进行比较嘛,不是,是字符串类型和字符串类型比较,这是我觉得他变慢的原因,你在这儿还用到了index,起到了相反的作用。这是我的观点,欢迎板砖。
[/Quote]
是字符行哦。。。这个我想我的表结构应该改下了。。。
-晴天 2008-07-23
  • 打赏
  • 举报
回复
如果满足条件的数据很多的话,索引可能会增加系统开销.
guoli0813 2008-07-23
  • 打赏
  • 举报
回复
declare @t table(A nvarchar(40),createtime datetime)
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()
insert into @t select 'aaaa',getdate()


select *
from @t

select cast(createtime as nvarchar(40)) as sum
from @t
where createtime>='2008/06/32'


消息 242,级别 16,状态 3,第 15 行
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。

同事小强友情赞助。

说明一个问题,不是像我预想的向字符串类型转化,是字符串向时间类型转化,看来我说的是有问题的。
guoli0813 2008-07-23
  • 打赏
  • 举报
回复
木瓜老弟,
你的语句

select * from vw_talbe where date>='2008/07/01'

where条件里面是时间和时间进行比较嘛,不是,是字符串类型和字符串类型比较,这是我觉得他变慢的原因,你在这儿还用到了index,起到了相反的作用。这是我的观点,欢迎板砖。
Andy__Huang 2008-07-23
  • 打赏
  • 举报
回复
查询速度当然与where条件有关,where后面的字段如果有索引速度会快好多,

还有与表的结构有关,表的数据量有关,where后面是否有函数有关等
lgxyz 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jacklinchen 的回复:]
date是日期型的吗?
select * from vw_talbe where datediff(d,'2008-07-01',date)>=0 试试
[/Quote]

你这样绝对更慢
ydage 2008-07-23
  • 打赏
  • 举报
回复
贴出vw_table的内容,确认下字段date的数据类型
wzy_love_sly 2008-07-23
  • 打赏
  • 举报
回复
有时候是很怪,估计是和数据的比例有关系,我写between '' and '' 就特慢
写成下面这样就快很多,很邪!

select * from  
where datediff(d,creatdate,'2008-01-01')<=0
and datediff(d,creatdate,'2008-02-01')>=0


utpcb 2008-07-23
  • 打赏
  • 举报
回复
贴出语句 贴出
两条语句的执行计划


看看执行计划有何不同
jacklinchen 2008-07-23
  • 打赏
  • 举报
回复
date是日期型的吗?
select * from vw_talbe where datediff(d,'2008-07-01',date)>=0 试试
mugua604 2008-07-23
  • 打赏
  • 举报
回复
select * from vw_table
查询全部 时间需要1分钟
select * from vw_talbe where date>='2008/07/01'
查询时间需要3分钟
date字段有做index
yrwx001 2008-07-23
  • 打赏
  • 举报
回复
貼出你的語句

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧