Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

Access数据库查询十万条数据速度奇慢给出代码求解答

周殿清  发表于:2016-08-04 21:12:28  
复制

第一个问题:数据库数据运算过慢

本人在公司做数据库查询,用access管理基础数据资料,货物发送情况,每个月基本一万条记录,几年的数据基本上就要几十万条,用前后台数据库分的方式,main数据库链接data数据库的基础数据表。主要针对2016年数据进行查询,基本数据条数5万条,每条记录大约有十几个字段。

具体查询代码如下

SELECT *

FROM [2016-测试表] AS a
WHERE ID in (select top 2 ID from [2016-测试表] where ProCate=a.ProCate order by AmountMUSD desc )
ORDER BY a.ProCate, a.AmountMUSD DESC;

第一次查询速度30多秒,此后再查询需要20多秒,请问如何改进或者优化,是用分页,还是需要设计窗体进行改进


第二个问题:数据库合并筛选前两名

同样是这段查询代码,如何实现分组合并后再筛选前几名,比如将产品类别相同(立加、卧加等),来源与某一国别(如:日本、美国、德国等)的进行分组合并,然后针对产品类别内部,进行国别的排序,比如前两名:1、美国$XXXX;2、德国$XXXX。


点击下载此附件

 

Top
zhaoyoulong 发表于:2016-08-05 16:16:29

换个思路:

一、在表中加一字段:筛选 布尔型

二、写一个函数用于更新符合条件和筛选(将符合条件的记录的 筛选 字段更新为 true)

三、条件查询




金宇 发表于:2016-08-05 17:12:03

解决方法:

1.设置主键

2.用来查询或者分组的相关字段设置索引



zhaoyoulong 发表于:2016-08-05 17:20:30

点击下载此附件

点击窗体中的按钮,打开查询就可以了

例子是每组选3条

每组选几条数组,自己可以根据函数参数改的



周殿清 发表于:2016-08-05 21:53:15
我研究一下,主要是这个查询还有好多,我上传看有2M限制,所以就挑了其中一个关键的。另外分页分组不知道怎么设置啊,看有网友提到了,但是不会做啊

周殿清 发表于:2016-08-05 22:03:30
zhaoyoulong  谢谢你的回复啊,我看了一下程序,这样设置筛选的确能够很快捷解决问题。此外结果中还有一个,就是筛选的激光产品,德国会出现好几次,而程序要求是产品类别为同一产品时,比如都是“激光产品”,国别都是德国只算合计的金额,就是把AmountMUSD求和计算,然后按照国别进行筛选,选出前几名(top N),可能就是类似于德国一行,新加坡一行,美国一行(假设);这里算法函数怎么实现呢?

zhaoyoulong 发表于:2016-08-08 09:09:41
分组求和用查询就可以了

周殿清 发表于:2016-08-08 13:09:49
好的,我试一下

总记录:7篇  页次:1/1 9 1 :