ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6624|回复: 8

[求助] 如何加快ACCESS多表查询的速度

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-5-19 23:02 | 显示全部楼层 |阅读模式
由于工作需要,我要在几个表来联合查询,得出结果,但是我写出来的语句查询速度非常慢,汗。不知道哪位可以指点一下?其中一个SQL语句如下:
SELECT CELTCHFP.EXCHID,CELTCHFP.DATE,CELTCHFP.PERIOD,SUM(CELTCHFP.TFCONGPGSM)/(SUM(RANDOMACC.CNROCNT+RANDOMACC.RAACCFA)+0.0000001)*SUM(CLTCH.TCASSALL)/(SUM(CLTCH.TASSALL)+0.0000001) as Wireless_Accessibility FROM CELTCHFP,RANDOMACC,CLTCH WHERE CELTCHFP.EXCHID = RANDOMACC.EXCHID AND CELTCHFP.DATE = RANDOMACC.DATE AND CELTCHFP.PERIOD = RANDOMACC.PERIOD AND CELTCHFP.EXCHID = CLTCH.EXCHID AND CELTCHFP.DATE = CLTCH.DATE AND CELTCHFP.PERIOD = CLTCH.PERIOD GROUP BY CELTCHFP.EXCHID,CELTCHFP.DATE,CELTCHFP.PERIOD

附件是ACCESS数据库。顺便问一下,这个速度跟数据库格式相关吗?

test.rar

206.31 KB, 下载次数: 75

TA的精华主题

TA的得分主题

发表于 2011-5-20 11:40 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-20 17:18 | 显示全部楼层
MARCO指的是在导入的时候建立主键吗,因为后期可能还要做用工具批量导入,不知道有没有影响?

TA的精华主题

TA的得分主题

发表于 2011-5-20 18:01 | 显示全部楼层
打开你的表看了下,问题大了,建立表间的关系都是 多对多 ,而且所引用的字段都是重复值,不知道你为何要如此建表关系?

TA的精华主题

TA的得分主题

发表于 2011-5-20 18:04 | 显示全部楼层
SELECT CELTCHFP.EXCHID,CELTCHFP.DATE,CELTCHFP.PERIOD,SUM(CELTCHFP.TFCONGPGSM)/(SUM(RANDOMACC.CNROCNT+RANDOMACC.RAACCFA)+0.0000001)*SUM(CLTCH.TCASSALL)/(SUM(CLTCH.TASSALL)+0.0000001) as Wireless_Accessibility FROM CELTCHFP,RANDOMACC,CLTCH WHERE  CELTCHFP.OBJECT_ID = RANDOMACC.OBJECT_ID AND CELTCHFP.OBJECT_ID = CLTCH.OBJECT_ID GROUP BY CELTCHFP.EXCHID,CELTCHFP.DATE,CELTCHFP.PERIOD

结果(速度很快呀)
EXCHID        DATE        PERIOD        Wireless_Accessibility
QZEBSCR12/GB/07B/5/28        110518        2000-2100        .99476550348579

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-20 21:12 | 显示全部楼层
我在我的机器上运行速度非常之慢,要等上五六分钟才能出来结果 ,我也不知道是怎么回事,你使用我上传的附件运行的吗?我在我同事的机器上运行也很慢。你用的ACCESS数据库版本是07还是03还是别的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-20 21:14 | 显示全部楼层
原帖由 marco 于 2011-5-20 18:01 发表
打开你的表看了下,问题大了,建立表间的关系都是 多对多 ,而且所引用的字段都是重复值,不知道你为何要如此建表关系?

因为源数据就是这样的,我也没办法,呵呵

TA的精华主题

TA的得分主题

发表于 2011-5-20 23:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我改掉了连接字段,都用 OBJECT 这个字段(有点像是三个表中的主键),也不知道是不是你想要的。

而你引用的那些字段 270条记录都是一样的值,建立对应关系根本就没什么意思,多对多造成计算混乱,数据运算很大,所以速度自然慢了,我这里用你的SQL语句也跑不动。我曾试过将其中 CELTCHFP 与 RANDOMACC 用你的方法连接,两个表各有270条记录,结果得到72900记录,原因就是你两表的对应字段270条记录相同,多对多的结果就是 270*270,而你的 CLTCH 表中有540条记录,其中一半是重复的,按你的运算将会得到 39366000 条记录,而且还要进行SUM / GROUP 等计算,速度不慢才怪。

我也就说上面那些了,具体的需要你自己弄清楚再设计查询语句,每个表的记录都不多,但相互间的关系搞错了也会很慢的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-20 23:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢MACRO的指点!我的原意是把几个表里面的相同时间、相同日期及相同EXCHID的数据进行汇总计算,给你的数据里面只有一个时间段的,如果存在多个时间段、多天或者多个EXCHID的时候SQL语句该怎么写?只用OBJECT可以实现吗?或者能否在SQL语句里面创造一个类似主键的来进行查询?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 16:57 , Processed in 0.023097 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表