以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [讨论]这段sql查询特慢呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=42286) |
-- 作者:e-png -- 发布时间:2013/11/7 16:30:00 -- [讨论]这段sql查询特慢呢? 执行后好几分钟才得出结果,数据源是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 -- 发布时间:2013/11/7 16:34:00 -- 你的数据量有多少呢? |
-- 作者:e-png -- 发布时间:2013/11/7 16:38:00 -- 总数大约4万多条记录 |
-- 作者:jspta -- 发布时间:2013/11/7 16:39:00 -- 可能数据太大了,in语句在执行效率会降低很多。 无论从安全性还是效率上,Access 都是不行的 |
-- 作者:e-png -- 发布时间:2013/11/7 16:40:00 -- 只是在access做数据源时查询特慢,10几分钟啊。。。 在sql数据源中查询同样的两表,瞬间完成了。。。
|
-- 作者:Bin -- 发布时间:2013/11/7 16:47:00 -- 4楼已经给出问题的答案了,你做一下索引吧,时间可以减低10倍左右,不过依然是慢,要1分钟. |
-- 作者:jspta -- 发布时间:2013/11/7 16:48:00 -- count(*) 这个改成 count([_Identify])试试,应该不会这么慢的
使用 ExecuteScalar
你把返回的代码贴出来看看 |
-- 作者:longtechwj -- 发布时间:2013/11/7 16:49:00 -- SELECT COUNT(*) FROM B A INNER JOIN A B ON A.ID=B.ID |
-- 作者:jspta -- 发布时间: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 -- 发布时间:2013/11/7 17:43:00 -- 9楼的有效 ,谢谢jspta [此贴子已经被作者于2013-11-8 17:22:47编辑过]
|