设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1280|回复: 5
打印 上一主题 下一主题

[Access本身] 如何减少数据库的体积,提升运行速度。

[复制链接]
跳转到指定楼层
1#
发表于 2006-6-13 17:12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教:

问题1:我的Access数据库大约只有2MB,但经过40人同时使用后,体积就变成了13MB。再压缩又变成了2MB。想请教为什么数据库在使用后就变得非常大了,有没有办法解决这个问题,而不用每次使用后再又来压缩。

问题2:自我感觉数据库中当查询越多时运行速度就越慢,请教各位是怎样来优化查询语句或通过其他的什么方法来提升Access运行速度的。(注:海狸先生的关于查询语句的执行速度比较的文章已经学习过)



谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2006-6-13 18:52:00 | 只看该作者
1.这是ACCESS的通病,在选项里可以设退出时自动压缩.

3#
发表于 2006-6-13 19:09:00 | 只看该作者
1、这是ACCESS的运行机制造成的。

有没有办法解决这个问题,而不用每次使用后再又来压缩。没有

2、在表中设置合理的索引,合计地设计SQL语句,尽量不用NOT IN,当然数据量越大,速度肯定越慢。
4#
 楼主| 发表于 2006-6-13 20:06:00 | 只看该作者
谢谢两位。
5#
 楼主| 发表于 2006-6-14 19:51:00 | 只看该作者
在一个网站上找到的替代Not In 和 IN 语句的方法:

数据库优化技巧:not inin语句的连接替代方案
在编写SQL语句时,如果要实现一张表有而另一张表没有的数据库时,通常第一直觉的写法就是:
select * from table1 where table1.id not in (select id from table2),这种方法虽然很直观,但是innot in的写法经常会影响其执行的效率,对于大数据量时,这个原因经常是性能的瓶颈。在SQL Server中,可以通过左连接的方法来解决,其替代写法如下:
select a.* from table<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="True" SourceValue="1" UnitName="a">1 a</st1:chmetcnv> left join table2 b on a.id=b.id where b.id is null
同理,这个方法也适用于in的情况



9.用EXISTS替代IN
  
  在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接
  
  在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率
  
  低效
  SELECT *
  FROM EMP (基础表
)
  
WHERE EMPNO > 0
  
AND DEPTNO IN (SELECT DEPTNO
  
FROM DEPT
  
WHERE LOC = 'MELB')
  

  高效
  SELECT *
  FROM EMP (基础表
)
  
WHERE EMPNO > 0
  
AND EXISTS (SELECT 'X'
  
FROM DEPT
  
WHERE DEPT.DEPTNO = EMP.DEPTNO
  
AND LOC = 'MELB')
  

  10.用NOT EXISTS替代NOT IN
  
  在子查询中,NOT IN子句将执行一个内部的排序和合并
  
  无论在哪种情况下,NOT IN都是最低效的,因为它对子查询中的表执行了一个全表遍历
  
  为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS
  

  例如:
  SELECT …
  
FROM EMP
  
WHERE DEPT_NO NOT IN (SELECT DEPT_NO
  
FROM DEPT
  
WHERE DEPT_CAT = 'A');
  

  为了提高效率改写为
  高效
  SELECT …
  
FROM EMP A, DEPT B
  
WHERE A.DEPT_NO = B.DEPT(+)
  
AND B.DEPT_NO IS NULL
  
AND B.DEPT_CAT(+) = 'A'
  

  最高效
  SELECT …
  
FROM EMP E
  
WHERE NOT EXISTS (SELECT 'X'
  
FROM DEPT D
  
WHERE D.DEPT_NO = E.DEPT_NO
  
AND DEPT_CAT = 'A');
  

  11.用表连接替换EXISTS
  
  通常来说,采用表连接的方式比EXISTS更有效率
  
  例如:
  SELECT ENAME
  
<FONT color=#000000>FROM EMP E
6#
发表于 2008-2-3 18:46:30 | 只看该作者
有点用哦!!谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-14 03:30 , Processed in 0.090015 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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