Foxtable(狐表)用户栏目专家坐堂 → [讨论]这段sql查询特慢呢?


  共有3637人关注过本帖树形打印复制链接

主题:[讨论]这段sql查询特慢呢?

帅哥哟,离线,有人找我吗?
e-png
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
[讨论]这段sql查询特慢呢?  发帖心情 Post By:2013/11/7 16:30:00 [只看该作者]

执行后好几分钟才得出结果,数据源是Access2003:

SELECT count(*) FROM {B} WHERE [ID] In (Select [ID] FROM {A} where ([year] = 2013 and [period] <= 9 ))         

 

但在SQL数据源查询时,瞬间完成。   不知道是什么问题。

 

我是在foxtable的SQL执行窗口中测试的。。。

[此贴子已经被作者于2013-11-7 16:36:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/7 16:34:00 [只看该作者]

你的数据量有多少呢?

 回到顶部
帅哥哟,离线,有人找我吗?
e-png
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2013/11/7 16:38:00 [只看该作者]

总数大约4万多条记录

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/11/7 16:39:00 [只看该作者]

可能数据太大了,in语句在执行效率会降低很多。

无论从安全性还是效率上,Access 都是不行的


 回到顶部
帅哥哟,离线,有人找我吗?
e-png
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2013/11/7 16:40:00 [只看该作者]

只是在access做数据源时查询特慢,10几分钟啊。。。   在sql数据源中查询同样的两表,瞬间完成了。。。

 


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/7 16:47:00 [只看该作者]

4楼已经给出问题的答案了,你做一下索引吧,时间可以减低10倍左右,不过依然是慢,要1分钟.

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/11/7 16:48:00 [只看该作者]

count(*) 这个改成 count([_Identify])试试,应该不会这么慢的

 

使用

ExecuteScalar

 

你把返回的代码贴出来看看


 回到顶部
帅哥哟,离线,有人找我吗?
longtechwj
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:659 积分:4686 威望:0 精华:0 注册:2013/6/11 17:51:00
  发帖心情 Post By:2013/11/7 16:49:00 [只看该作者]

SELECT COUNT(*) FROM B A INNER JOIN A B ON A.ID=B.ID

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/11/7 16:58:00 [只看该作者]

SELECT count(*) FROM {B} WHERE [ID] In (Select [ID] FROM {A} where ([year] = 2013 and [period] <= 9 )) 

 

改成

 

select count(*) from b inner join a on b.id = a.id where a.year = 2013 and a.period <= 9

或者

 

select count(*) from b inner join (Select [ID] FROM {A} where ([year] = 2013 and [period] <= 9 )) C  on b.id = c.id 

 

可以试试这两个语句

 


 回到顶部
帅哥哟,离线,有人找我吗?
e-png
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2013/11/7 17:43:00 [只看该作者]

9楼的有效 ,谢谢jspta
[此贴子已经被作者于2013-11-8 17:22:47编辑过]

 回到顶部