Z
zohzjf
Unregistered / Unconfirmed
GUEST, unregistred user!
我在本论坛中找到如下的一些言论:
{各位高高手:
{现在我需要从一个文本文件中向Access表中一个字段导入数据,但由于数据量大
{(90万条左右)仅用AppendRecord需要时间太长,有无好办法?
{来自 :IAmOnTheWay 时间 :2001-08-27 19:29:00
{用的PB数据管道,5分钟即刻搞定
{----------------------------------------------------------------------------------------
{一个SQL SERVER数据库表,大约有五六十万条记录,已建了适当的索引,查询语句也很恰当,
{每次查询大约要两三秒,现在想提高查询的速度,不知还有何良方?
{另外有个问题很奇怪,比如以电话号码查询,如果查询以某个数据开头的号码,
{查询结果反而快(返回很大的记录集),查询某个特定号码相对慢些,不知是为什么?
{
{
{关键是看你返回的结果集有多大,
{如果只是返回部分结果集,那在50万记录中的查询速度应该在1秒以下。
{如果照你说的,索引是正确建立的,那只能是检查硬件配置是否合理了。
{你的内存足够大吗?
--------------------------------------------
---------------------------------------------------------------------------------------
我认为查询五六十万条记录并把所有数据都提取出来只用两三秒是不可能的,
如果做三层,无状态的,把数据一下子全部取出来,不忍受几十秒种是不可能的。
大家来看看我的一个测试:用bde直接连接还如此之慢,
那么三层的就更慢了
环境:delphi5.5+oracle8.0.5
数据库服务器win2000 程序运行
table1 连接表ck01记录数37772
Query1 语句 select * form ck01记录数37772
----------------------
Table1.Active :=true;//160ms
Table1.last;//20ms
//-----------------------------------------
Query1.Active :=true;//160ms
Query1.last;//20350ms
、、--------------------------------------
、、 实际上table并没没有把数据全部取出来;
拉动dbgrid的滚动条是鼠标就变成sql查询正忙的形状。
我使用:
ClientDataSet1.data:=DataSetProvider2.data;//33700ms DataSetProvider1 连接 query1
ClientDataSet1.data:=DataSetProvider1.data;// 22990ms DataSetProvider2 连接table1
直接的时间差距也说明了这个问题;
更令我痛苦的是用pb连接的几秒种就出来了,我怀疑pb的打开方式与dellphi的table控件是
一样的,可是pb的拉动滚动条是鼠标的形状不变,我的同事硬说pb、是全部去出来的。
我不会pb,不知道是否真的是这样。
我说的是否正确,请大家讨论,如果是这样,大家作的三层是不是全是有状态的,那么,我
的程序是mdi的我的每个ClientDataSet 不是要加一个DataSetProvider控件吗,不然的话我就
要忍受乌龟般的速度,好痛苦呀。
大伙有何高见尽量提出来,无论什么只要相关就行,发言有分,反应激烈的话我再开一个帖子给分!!!!
{各位高高手:
{现在我需要从一个文本文件中向Access表中一个字段导入数据,但由于数据量大
{(90万条左右)仅用AppendRecord需要时间太长,有无好办法?
{来自 :IAmOnTheWay 时间 :2001-08-27 19:29:00
{用的PB数据管道,5分钟即刻搞定
{----------------------------------------------------------------------------------------
{一个SQL SERVER数据库表,大约有五六十万条记录,已建了适当的索引,查询语句也很恰当,
{每次查询大约要两三秒,现在想提高查询的速度,不知还有何良方?
{另外有个问题很奇怪,比如以电话号码查询,如果查询以某个数据开头的号码,
{查询结果反而快(返回很大的记录集),查询某个特定号码相对慢些,不知是为什么?
{
{
{关键是看你返回的结果集有多大,
{如果只是返回部分结果集,那在50万记录中的查询速度应该在1秒以下。
{如果照你说的,索引是正确建立的,那只能是检查硬件配置是否合理了。
{你的内存足够大吗?
--------------------------------------------
---------------------------------------------------------------------------------------
我认为查询五六十万条记录并把所有数据都提取出来只用两三秒是不可能的,
如果做三层,无状态的,把数据一下子全部取出来,不忍受几十秒种是不可能的。
大家来看看我的一个测试:用bde直接连接还如此之慢,
那么三层的就更慢了
环境:delphi5.5+oracle8.0.5
数据库服务器win2000 程序运行
table1 连接表ck01记录数37772
Query1 语句 select * form ck01记录数37772
----------------------
Table1.Active :=true;//160ms
Table1.last;//20ms
//-----------------------------------------
Query1.Active :=true;//160ms
Query1.last;//20350ms
、、--------------------------------------
、、 实际上table并没没有把数据全部取出来;
拉动dbgrid的滚动条是鼠标就变成sql查询正忙的形状。
我使用:
ClientDataSet1.data:=DataSetProvider2.data;//33700ms DataSetProvider1 连接 query1
ClientDataSet1.data:=DataSetProvider1.data;// 22990ms DataSetProvider2 连接table1
直接的时间差距也说明了这个问题;
更令我痛苦的是用pb连接的几秒种就出来了,我怀疑pb的打开方式与dellphi的table控件是
一样的,可是pb的拉动滚动条是鼠标的形状不变,我的同事硬说pb、是全部去出来的。
我不会pb,不知道是否真的是这样。
我说的是否正确,请大家讨论,如果是这样,大家作的三层是不是全是有状态的,那么,我
的程序是mdi的我的每个ClientDataSet 不是要加一个DataSetProvider控件吗,不然的话我就
要忍受乌龟般的速度,好痛苦呀。
大伙有何高见尽量提出来,无论什么只要相关就行,发言有分,反应激烈的话我再开一个帖子给分!!!!