请问如何提高数据库的访问速度?(100分)

  • 主题发起人 主题发起人 ggg
  • 开始时间 开始时间
G

ggg

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在编的一个数据库系统,其基本界面是这样的:左边为目录数,负责管理各个不同的数据库,

右边为Dbgrid,负责显示数据。我所有的数据库都是通过一个TQuery打开与关闭。现在的问题

是:

1:当我从一个数据库库切换到另一个数据库时,DBgrid要刷新一,两秒左右才将数据完全

显示出来(目前我每个数据库充其量也只有200条记录);

2:由于我的每个数据库涉及字段较多(50条以上),而DBGRID也无须显示那么多的字段,因此

我将不太重要的字段隐藏(fields.visible:=false),这样一来,重复问题一的步骤,DBGRID

刷新一次大约需要4,5秒左右。

3:由于问题1,2的存在,我于是在SQL语句中采用“select fields1,fields2....fieldsi

from table1”后,速度飞快。但更严重的问题又来了。当我打开记录录入窗口时,系统提示“某某字段

不存在”(因为我压根就没把它打开)。即便我加入一个TABLE控件来管理数据录入,修改等操作,

那bookmark也失效了,没有书签,难道要我用locate来定位指数据进行修改吗?

 
对表添加索引,用FindKey来定位.
分析清楚表之间的关系,尽可能把表的字段数限制在20个以下.
不会这么慢.
 
如果要快可能比较麻烦,
在DBGrid显示时,根据屏幕可显示的来构造数据集
用户要求卷动时,调整数据集.
在数据录入时用另外一个Query根据主键找到用户要求的
的记录修改它.
可能还有别的原因.
 
首先确定你使用的是什么数据库?
"所有的数据库都是通过一个TQuery打开与关闭"
如是文件型的数据库不要使用Query,用Table会快,如需限定
条件并不非要用SELECT ...这样的语句,可以使用Table+Filter.
或其他方法,千万不要每需查询数据库就Query一下,太慢了.
你只需Filter一下.
如是SQL类数据库则相反要用TQuery.
DbGrid要有闪烁可以在查询前使用DisableControls,查询完在EnableControls
会使感觉快些.
实在不行你可适当使用LockWindowUpdate函数,可以看不到窗口的更新过程.

 
1、对于文件型数据库,用Table比Query快,对于C/S型Query比Table快。
因为对于文件型:对于Table是直接通过BDE的API访问数据库;
对于Query,BDE需要把SQL转换成API再进行查询。
因为对于C/S型:对于Table,BDE需要把API转换成SQL进行查询;
对于Query,BDE直接把SQL传给数据库进行查询。
而且对于不同的数据库,比如:dBase,Paradox,...,即使用同一种组件,
速度也相差很大,具体用哪个组件,还要比较之后再用。
2、SQL语句的书写也有关系,比如:在WHERE中设定(... and ... and ...)型
条件时,把容易FALSE的条件放在前面,这样可以提高查询速度。总的来说就是
SQL的优化问题。
 
1.用Query的话,用关键字建Index
2.不要求显示的字段就留的库里别取出来,这佯速度可以
提高不少。
 
多人接受答案了。
 
后退
顶部