:: Архив конференции по VFP до 2005 года
Re: Почему не используется RASHMORE
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
На сокращенных таблицах, которые были во вложении запрос оптимизируется для таблицы kvart с использованием индекса ADRES. На полной же таблице - не оптимизируется.
Попробовал переиндексировать таблицу STR в VFP9.0. Не дает построить индекс
LEFT(p2,AT(" ",p2,IIF(INLIST(ASC(LEFT(LTRIM(p2),1)),48,49,50,51,52,53,54,55,56,57),2,1))-1)
ошибка FoxPro 9.0
Error building key for index "name". (Error 2199)
Похоже, VFP9 не пропускает индексы с переменной длинной ключа. Только не понятно, почему запрос не оптимизируется именно по таблице kvart, если проблема с индексом по таблице STR.
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
те талицы которые были во вложении у kvart - collate MACHINE у Str - collate RUSSIAN - если все привести в порядок - все одинаково работает и в vfp8sp1 и vfp9 beta (релиза нема)




------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
PaulWist

Сообщений: 14585
Дата регистрации: 01.04.2004
Вадим, прогони в бете

CREATE CURSOR test (ID i)
INDEX ON STR(ID) TAG ID
FOR i = 1 TO 1000000
INSERT INTO test (ID) VALUES (i)
ENDFOR
SET ANSI ON
s = SECONDS()
SELECT * FROM test WHERE STR(ID) = '2' NOFILTER INTO CURSOR tmp
?(SECONDS() - s)*1000
SET ANSI OFF
s = SECONDS()
SELECT * FROM test WHERE STR(ID) = '2' NOFILTER INTO CURSOR tmp
?(SECONDS() - s)*1000

что говорит SYS(3052) и какие временные результаты получаются, у меня при ON - full. а при OFF - none и соответственно время разное.

Видимо фича на лицо.




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004

Паша, чего-то я тестами с ничего не понял - гоняю - гоняю - самые противоречивые мнения
тока в начале добавил строку sys(1104)
C RUSSIAN
15,0
0,0
далее гоняем тоже самое
0,0
0,0
c MACHINE
15,0
0,0
Уже успокоился - перезапустил 9-ку (уже раз 10 наверное)
тестю с MACHINE
0,0
15,0 (?) - что за фикус ?
Была еще опция для Select SQL - толи NoBuffer толи NoCache - еще ее надо проверить
Уже времени нет - день заканчивается




------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
При SET ANSI ON на маленькой таблице kvart (120 000 записей) оптимизация производится, но результат, естественно, неправильный. На полной же таблице (1 500 000), оптимизация не производится ни при каком значении ANSI. Рад бы выслать, но это 72М только DBF.
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
У меня VERSION VFP 09.00.0000.2412. Надеюсь, это не бэта.
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
PaulWist

Сообщений: 14585
Дата регистрации: 01.04.2004
Цитата:
09.00.0000.2412

Релиз




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
Теперь еще одно наблюдение. Копирую из 8.0 таблицы в другую папку.Открываю ее со старым индексом. Запускаю запрос. При SET ANSI ON оптимизация производится. Перед этим сколько не переупаковывал, оптимизация не производилась.
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, Сергей!

Да, похоже в VFP9 он не считает что STR() даёт строку фиксированной ширины
Даже STR(..., 10, 0) не удовлетворяет оптимизатор, а вот скажем
PADL(STR(), 10) уже оптимизируется
Так что оберни всю свою ботву в PADL() - должно помочь
P.S. PADL не только "дополняет", он ещё и "режет лишнее" - так что не
ошибись с размером




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Почему не используется RASHMORE
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
2PaulWist
Паша - твой пример - вообще-то не правильный - по его запросам никогда ничего не будет найдено. STR(ID) это даже для 1000000 = " 1000000" - т.е. 3 пробела в начале ибо в данном случае неуказанный параметр длины по умолчанию 10 - поэтому для STR(ID)="2" никогда ничего не будет найдено. Пришлось немного поменять код для теста
Set Exact Off
Sys(1104)
res=""
Sys(3054,11,"Res")
Set Collate To "MACHINE"
CREATE CURSOR test (ID i)
INDEX ON STR(ID,7) TAG ID
FOR i = 1 TO 1000000
INSERT INTO test (ID) VALUES (i)
ENDFOR
SET ANSI ON
s = SECONDS()
* ищем пробел и 2
SELECT * FROM test WHERE STR(ID,7) = ' 2' NOFILTER INTO CURSOR tmp
?(SECONDS() - s)*1000 , _TALLY
SET ANSI OFF
s = SECONDS()
SELECT * FROM test WHERE STR(ID,7) = ' 2' NOFILTER INTO CURSOR tmp
?(SECONDS() - s)*1000 , _TALLY
Результат для vfp8sp1
0,000 0
281,000 100000
Результат для vfp9beta
0,000 0
409,000 100000
с Set EngineBehavior 80
0,000 0
390,000 100000
В обоих случаях sys(3054) выдет одно и тоже
Цитата:
Using index tag Id to rushmore optimize intermediate result
Rushmore optimization level for intermediate result: partial
Так что никаких глюков ни багов ни фич не вижу. Использование SET ANSI все в пределах хелпа
Только вот не понятно почему запрос vfp9 медленне чем vfp8 это непонятно




------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика