11 个解决方案
#1
每次只加载必要的内容,不要全部加载
#2
自己弄一个数据库,然后定时从access里同步过去。
#3
#4
无论任何方式,access都不能支持这么大的数据量。
access无法建立索引,所以“按需加载”没用,access只能做线性的查找。
access无法建立索引,所以“按需加载”没用,access只能做线性的查找。
#5
这话别当真。老实按你公司的需求建索引吧。按说你们公司连进口设备都用上了,也不缺钱报销一两本ACCESS编程方面的书籍了
#6
用来查询的算法策略(包括 SQL 语句的写法)都大有讲究:
1 尽量避免在 Where 子句中做运算,特别是字符串运算,也要避免长字符串的比较。
例如某网友做的测试:
select * from records where Mid(card_no,1,4)='5378' (13秒)
select * from records where amount/30< 1000 (11秒)
改为:
select * from records where card_no like '5378%'(< 1秒)
select * from records where amount < 1000*30(< 1秒)
2 在有索引的大数据表中避免在索引字段上使用 IN 关键字(OR 逻辑)
select count(*) from stuff where id_no in('0','1')(23秒)
(select count(*) from stuff where id_no in = '0' or id_no in = '1' 效果相同)
改成
select count(*) from stuff where id_no='0'
select count(*) from stuff where id_no='1'
后相加,3秒
3 充分利用子查询
根据我的经验,当先用某一字段查询时可将子集缩得很小,再查询时遍历的开销就小了。
4 尽量避免为了只用一个 SQL 语句而结构得非常复杂的逻辑
5 不必要时,就不要 select *,而是列出你实际需要的字段表,减小对虚拟内存的开销,避免频繁的磁盘交换。
6 实际上数据库表的设计也极有讲究,例如用数字编码代替规律性或固有名词字符串,大大缩小库容。
总之,要对数据库做充分的分析,多做一些测试实验,优化你的查询策略和算法。
1 尽量避免在 Where 子句中做运算,特别是字符串运算,也要避免长字符串的比较。
例如某网友做的测试:
select * from records where Mid(card_no,1,4)='5378' (13秒)
select * from records where amount/30< 1000 (11秒)
改为:
select * from records where card_no like '5378%'(< 1秒)
select * from records where amount < 1000*30(< 1秒)
2 在有索引的大数据表中避免在索引字段上使用 IN 关键字(OR 逻辑)
select count(*) from stuff where id_no in('0','1')(23秒)
(select count(*) from stuff where id_no in = '0' or id_no in = '1' 效果相同)
改成
select count(*) from stuff where id_no='0'
select count(*) from stuff where id_no='1'
后相加,3秒
3 充分利用子查询
根据我的经验,当先用某一字段查询时可将子集缩得很小,再查询时遍历的开销就小了。
4 尽量避免为了只用一个 SQL 语句而结构得非常复杂的逻辑
5 不必要时,就不要 select *,而是列出你实际需要的字段表,减小对虚拟内存的开销,避免频繁的磁盘交换。
6 实际上数据库表的设计也极有讲究,例如用数字编码代替规律性或固有名词字符串,大大缩小库容。
总之,要对数据库做充分的分析,多做一些测试实验,优化你的查询策略和算法。
#7
好吧,居然是支持索引的。从来没有用过,因为access是给裱糊匠用的。
#8
#9
用DAO,传说对Access做了优化,操作速度比ADO快,而且提供诸如CompactDatabase(函数功能等同于Access里的压缩和修复数据库菜单功能)一类ADO没有的函数
#10
用SQLITE做啊...很小,很好用.
不过VB方面的资料好少.好可怜
#11
这要分析日本设备的数据保留量等信息。
至于为啥不能用mysql 甚至 sqlserver实在保持疑惑,还有个简单的思路,你可以尝试一下。
实时把要查询的数据简化后放入另一个mdb中,保持另一个查询用mdb的苗条。
其实只要能实时进行数据转移,sql server一类的东西使用就不成问题了。
说实话,10w级别数据量,不加索引对sql server都有点难受,别说access了。
至于为啥不能用mysql 甚至 sqlserver实在保持疑惑,还有个简单的思路,你可以尝试一下。
实时把要查询的数据简化后放入另一个mdb中,保持另一个查询用mdb的苗条。
其实只要能实时进行数据转移,sql server一类的东西使用就不成问题了。
说实话,10w级别数据量,不加索引对sql server都有点难受,别说access了。
#1
每次只加载必要的内容,不要全部加载
#2
自己弄一个数据库,然后定时从access里同步过去。
#3
#4
无论任何方式,access都不能支持这么大的数据量。
access无法建立索引,所以“按需加载”没用,access只能做线性的查找。
access无法建立索引,所以“按需加载”没用,access只能做线性的查找。
#5
无论任何方式,access都不能支持这么大的数据量。
access无法建立索引,所以“按需加载”没用,access只能做线性的查找。
这话别当真。老实按你公司的需求建索引吧。按说你们公司连进口设备都用上了,也不缺钱报销一两本ACCESS编程方面的书籍了
#6
用来查询的算法策略(包括 SQL 语句的写法)都大有讲究:
1 尽量避免在 Where 子句中做运算,特别是字符串运算,也要避免长字符串的比较。
例如某网友做的测试:
select * from records where Mid(card_no,1,4)='5378' (13秒)
select * from records where amount/30< 1000 (11秒)
改为:
select * from records where card_no like '5378%'(< 1秒)
select * from records where amount < 1000*30(< 1秒)
2 在有索引的大数据表中避免在索引字段上使用 IN 关键字(OR 逻辑)
select count(*) from stuff where id_no in('0','1')(23秒)
(select count(*) from stuff where id_no in = '0' or id_no in = '1' 效果相同)
改成
select count(*) from stuff where id_no='0'
select count(*) from stuff where id_no='1'
后相加,3秒
3 充分利用子查询
根据我的经验,当先用某一字段查询时可将子集缩得很小,再查询时遍历的开销就小了。
4 尽量避免为了只用一个 SQL 语句而结构得非常复杂的逻辑
5 不必要时,就不要 select *,而是列出你实际需要的字段表,减小对虚拟内存的开销,避免频繁的磁盘交换。
6 实际上数据库表的设计也极有讲究,例如用数字编码代替规律性或固有名词字符串,大大缩小库容。
总之,要对数据库做充分的分析,多做一些测试实验,优化你的查询策略和算法。
1 尽量避免在 Where 子句中做运算,特别是字符串运算,也要避免长字符串的比较。
例如某网友做的测试:
select * from records where Mid(card_no,1,4)='5378' (13秒)
select * from records where amount/30< 1000 (11秒)
改为:
select * from records where card_no like '5378%'(< 1秒)
select * from records where amount < 1000*30(< 1秒)
2 在有索引的大数据表中避免在索引字段上使用 IN 关键字(OR 逻辑)
select count(*) from stuff where id_no in('0','1')(23秒)
(select count(*) from stuff where id_no in = '0' or id_no in = '1' 效果相同)
改成
select count(*) from stuff where id_no='0'
select count(*) from stuff where id_no='1'
后相加,3秒
3 充分利用子查询
根据我的经验,当先用某一字段查询时可将子集缩得很小,再查询时遍历的开销就小了。
4 尽量避免为了只用一个 SQL 语句而结构得非常复杂的逻辑
5 不必要时,就不要 select *,而是列出你实际需要的字段表,减小对虚拟内存的开销,避免频繁的磁盘交换。
6 实际上数据库表的设计也极有讲究,例如用数字编码代替规律性或固有名词字符串,大大缩小库容。
总之,要对数据库做充分的分析,多做一些测试实验,优化你的查询策略和算法。
#7
无论任何方式,access都不能支持这么大的数据量。
access无法建立索引,所以“按需加载”没用,access只能做线性的查找。
这话别当真。老实按你公司的需求建索引吧。按说你们公司连进口设备都用上了,也不缺钱报销一两本ACCESS编程方面的书籍了
好吧,居然是支持索引的。从来没有用过,因为access是给裱糊匠用的。
#8
#9
用DAO,传说对Access做了优化,操作速度比ADO快,而且提供诸如CompactDatabase(函数功能等同于Access里的压缩和修复数据库菜单功能)一类ADO没有的函数
#10
用SQLITE做啊...很小,很好用.
不过VB方面的资料好少.好可怜
#11
这要分析日本设备的数据保留量等信息。
至于为啥不能用mysql 甚至 sqlserver实在保持疑惑,还有个简单的思路,你可以尝试一下。
实时把要查询的数据简化后放入另一个mdb中,保持另一个查询用mdb的苗条。
其实只要能实时进行数据转移,sql server一类的东西使用就不成问题了。
说实话,10w级别数据量,不加索引对sql server都有点难受,别说access了。
至于为啥不能用mysql 甚至 sqlserver实在保持疑惑,还有个简单的思路,你可以尝试一下。
实时把要查询的数据简化后放入另一个mdb中,保持另一个查询用mdb的苗条。
其实只要能实时进行数据转移,sql server一类的东西使用就不成问题了。
说实话,10w级别数据量,不加索引对sql server都有点难受,别说access了。