FoxPro SELECT语句会降低网络性能

时间:2018-12-24 09:01:24

标签: foxpro

数据库的

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

表联系的拉什莫尔优化级别:无

1 个答案:

答案 0 :(得分:0)

此命令:

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设置意味着返回的记录必须选中删除的标记