SQL奇怪问题,某段数据Select比别的数据段速度慢!!

sunmoonn 2006-11-29 06:32:15
SQL奇怪问题,某段数据Select比别的数据段速度慢!!
有相关表和字段
表A S_NO
表B S_NO、P_NO
表C P_NO、P_Date
里面有1~11月的相关数据
使用
select * from A表 where S_NO in(select S_NO from B表 where P_NO in (select P_NO from C表 where P_date between '2006-01-01' and '2006-11-30'))
这一个SQL语句得到结果的时间要比
select * from A表 where S_NO in(select S_NO from B表 where P_NO in (select P_NO from C表 where P_date between '2006-11-01' and '2006-11-30'))
这句得到结果的时间短得多.
不明白怎么回事
请各位指教一下.
...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyun0112 2006-11-30
  • 打赏
  • 举报
回复
拿到查询分析器去分析一下

*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
vbman2003 2006-11-30
  • 打赏
  • 举报
回复
一般来说in子句效率不是很高,不过你的问题似乎和这个无关
如果1-11月都很快,而只查11月的很慢,好象也不是数据量大小问题
你字段不要用*号,一个个试试看,是不是表中某些字段数据的问题?
说不好,试试吧
of123 2006-11-30
  • 打赏
  • 举报
回复
速度与 SQL 的结构不是绝对成反比。楼主的子查询嵌套是加快查询的方法之一,因为它可以缩小上一级查询搜索的范围。

你试一下:
select P_NO from C表 where P_date between '2006-01-01' and '2006-11-30'

select P_NO from C表 where P_date between '2006-11-01' and '2006-11-30'
是否速度差距很大。

如果是,试试:
1
如果你的如果字段是字符型,改为 DateTime 型。如果是 Access 数据库,between '2006-11-01' and '2006-11-30' 要同时改为 between #2006-11-01# and #2006-11-30#

2
建立一个基于日期字段的索引
mustudent 2006-11-30
  • 打赏
  • 举报
回复
最好不要用in in執行的效率好像就不是很高 用子查詢看看
上官云峰 2006-11-30
  • 打赏
  • 举报
回复
不管是不是两个月的数据是否一样,你自己的sql语句写的有些复杂,楼上的是很简单sql了,你可以试试,

如果是数据量根本不同,当然会出现你现在的现象
zyg0 2006-11-30
  • 打赏
  • 举报
回复
1数据多少不一样百 这有什么可以解释的
2 可以采用这个方法能快很多
select a.* from A表 a,B表 b,c表 c where a.S_NO=b.S_NO and b.P_NO=c.P_NO and c.P_date between '2006-01-01' and '2006-11-30'
sunmoonn 2006-11-30
  • 打赏
  • 举报
回复
问题解决了
方法是给这三个表加了索引

现在也想不出什么原因
可能这个数据库本身的问题吧。
不搞了.反正问题解决.
结帖去
sunmoonn 2006-11-29
  • 打赏
  • 举报
回复
是的
是时间不同
也就是说
我查2006-11-01~2006-11-30的数据比查2006-10-01~2006-11-30月的数据慢
想问一下各位大大
这是怎么回事
zhuanzhu_zhizhuo 2006-11-29
  • 打赏
  • 举报
回复
lz请指出不同指处啊
两句貌似相同
只是时间不同么???
sunmoonn 2006-11-29
  • 打赏
  • 举报
回复
只有11月份C表的数据Select的时候速度慢
其他月份不会慢
奇怪的情况是
1.如果Between '2006-10-01' and '2006-11-30'的话
速度就很快了.时间花不了1秒.
2.如果是 Between '2006-11-01' and '2006-11-30'的话,
速度变慢.时间要花22秒
3.如果把C表11月的数据改为12月或别的月.速度变快.时间花不了1秒

Update C set P_Date=P_Date+30 where P_Date Between '2006-11-01' and '2006-11-30'

select * from A表 where S_NO in(select S_NO from B表 where P_NO in (select P_NO from C表 where P_date between '2006-12-01' and '2006-12-30'))

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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