Оператор FoxPro SELECT снижает производительность сети - PullRequest
0 голосов
/ 24 декабря 2018

SELECT оператор базы данных очень медленный.Таблица базы данных содержит 95 000 записей.

У меня есть список индексов, и индекс TAG включен.Протестировано удаленное соединение с использованием VPN, поэтому я вижу медленные скорости.

SELECT * 
FROM CONTACT 
WHERE SUB_NR = 'LD96178117'

-> занимает 3 секунды.

SELECT TOP 50 CONTACT.* 
FROM CONTACT 
ORDER BY SUB_NR

-> занимает 142 секунды.

Secondвремя в том же 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 * 
FROM CONTACT  
WHERE SUB_NR = 'LD96178117'

Использование вкладки индекса Sub_nr для ускоренной оптимизации контакта с таблицей Уровень оптимизации Rushmore для контакта с таблицей: полный

SELECT TOP 50 * 
FROM CONTACT 
ORDER BY SUB_NR

Уровень оптимизации Rushmore для контакта с таблицей: отсутствует

1 Ответ

0 голосов
/ 01 января 2019

Эта команда:

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 был добавлен в SQL Server в версии 2008. Если вы используете старый поставщик OLE или если он не был оптимизирован для команды TOP, вы можете увидеть непредсказуемую производительность.

После выполнения запросав первый раз последующие запуски того же запроса будут извлекаться из кеша памяти, не требуя доступа к диску, следовательно, повышается производительностьКроме того, поскольку вы открываете файл в режиме SHARED, блокировка может быть фактором.Кроме того, настройка DELETED означает, что для возвращаемых записей должен быть отмечен удаленный маркер

...