【问题标题】:FoxPro SELECT statement slow network performanceFoxPro SELECT 语句降低网络性能
【发布时间】:2018-12-24 09:01:23
【问题描述】:

SELECT数据库语句很慢。数据库表有 95.000 条记录。

我有一个索引列表,其中包含索引标签。使用 VPN 测试了远程连接,所以我可以看到速度很慢。

SELECT * 
FROM CONTACT 
WHERE SUB_NR = 'LD96178117'

-> 需要 3 秒。

SELECT TOP 50 CONTACT.* 
FROM CONTACT 
ORDER BY SUB_NR

-> 需要 142 秒。

第二次在同一个 AdoConnection 中查询运行得更快。

PROVIDER=VFPOLEDB.1;Data Source=X:\Projects\FoxPro\ElvyTest\ADMSEGJN.DBC;Collating Sequence=machine;SourceType=dbf;Deleted=Yes;Mode=ReadWrite|Share Deny None;Mode=Share Deny None;DELETED=True;CODEPAGE=1252;MVCOUNT=16384;ENGINEBEHAVIOR=90;TABLEVALIDATE=0;REFRESH=5;VARCHARMAPPING=False;ANSI=True;REPROCESS=5;OLE DB Services = 0;

SELECT TOP 50 CONTACT.* 
FROM CONTACT 
ORDER BY SUB_NR

也测试过:

SET COLLATE TO "MACHINE"

SET COLLATE TO "GENERAL"

在 FOXPRO 9.0 SP2 ATAGINFO() 中打开文件显示:

TAGNAME: SUB_NR, TAGTYPE: REGULAR,     
EXPRESSION: SUB_NR,FILTER, ORDER: ASCENDING, COLLATION: MACHINE

看起来 VFPOLEDB.1 正在 %TEMP% 文件夹中创建一个临时索引。

SYS(3054,12) 在 Foxpro 中显示 Rushmore 使用带有 select 语句的索引

SELECT * 
FROM CONTACT  
WHERE SUB_NR = 'LD96178117'

使用索引标签Sub_nr rushmore优化表接触 表联系的 Rushmore 优化级别:完全

SELECT TOP 50 * 
FROM CONTACT 
ORDER BY SUB_NR

表联系人的 Rushmore 优化级别:无

【问题讨论】:

    标签: foxpro


    【解决方案1】:

    这个命令:

    SELECT * from CONTACT WHERE SUB_NR='LD96178117' 
    

    告诉 SQL 在索引中查找 SUB_NR,并返回该行中的所有数据。

    这个命令:

    SELECT TOP 50 CONTACT.* from CONTACT ORDER BY SUB_NR
    

    告诉 SQL 按 SUB_NR 对表进行排序(很可能生成临时表),一旦完成,就拉回前 50 条记录。 VFP OLE 提供者如何选择优化这是任何人的猜测。 TOP 是在 2008 版中添加到 SQL Server 的。如果您使用的是旧的 OLE 提供程序,或者它没有针对 TOP 命令进行优化,您可能会看到不可预测的性能。

    第一次运行查询后,相同查询的后续运行将从内存缓存中提取,无需访问磁盘,从而获得更好的性能。此外,由于您以共享模式打开文件,因此锁定可能是一个因素。此外,DELETED 设置意味着返回的记录必须检查已删除标记​​p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 2015-01-29
      • 1970-01-01
      • 2014-01-12
      • 2017-11-27
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多