:: Visual Foxpro, Foxpro for DOS
про Total
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Приходится поддерживать проекты, написанные ушедшими
программистами. Довольно типовой прием там total
Мое вхождение в Фокс как-то обошлось без него.
Поскольку я не слишком хорошо понимаю этот оператор,
пытаюсь заменить его select group by с where где беру
содержание индекса и далее like '%'
Все равно по скорости выполнения получается медленнее,
хотя анализ плана sys(3054) показывает , что индекс используется
В самом group by тоже пишу не переменные через запятую, а выражение
индекса.
Довольно таки странно звучит, но неведомо почему сам total
у меня вызывает дичайшее раздражение еще и потому,
что в кодах, что вижу, часто используются переменные,
которые де факто не используются в группировании,
поэтому возникает непонимание того,
что именно в таком поле будет в результате.
Ratings: 0 negative/0 positive
Re: про Total
Владимир Максимов

Сообщений: 14094
Откуда: Москва
Дата регистрации: 02.09.2000
Ну, без конкретного примера сложно что-то посоветовать. Только рассуждения общего плана


1. Total как и Calculate - это перебор записей в текущей рабочей области. Но! С учетом текущего активного индекса. Т.е. работа данной команды напрямую зависит от того, какой индекс активный в настоящий момент.

Более того, результат может быть разным в разных условиях (активировали другой индекс - получили другой результат). Как следствие, результат может оказаться не таким, как ожидалось.

Именно этот факт вызывает больше всего проблем и недопониманий. Другими словами - это "контекстно-зависимая" команда. В том смысле, что результат ее работы зависит от окружения (контекста)

Команда Select-SQL никак не зависит от настроек рабочей области. Т.е. в этом смысле ее работа более предсказуемая

2. Опция Like (если символ % стоит в начале или в середине выражения для поиска) не может быть оптимизирована. Никак. Вообще. Ни при каких индексах. Оптимизация возможна только в том случае, если символ % в конце выражения для поиска. Но в этом случае это уже не собственно Like, а просто поиск по первым символам. Т.е. может быть задействован индекс

3. Если в команде Total используется директивы While, NEXT, RECORD, REST то количество строк для анализа может оказаться существенно меньше общего количества строк в таблице. На чем и можно получить существенный выигрыш производительности. Но опять же, при корректном активном индексе

4. Не надо абсолютизировать команду Select-SQL и пытаться впихнуть в один запрос сразу все условия и критерии поиска. Зачастую оказывается более выгодным сделать несколько последовательных запросов. Как с точки зрения производительности, так и с точки зрения наглядности (понятности, читабельности)

5. Возможно, более простым решение будет цикл SCAN.

Т.е. все упирается в конкретную задачу. Рекомендаций-то можно много наговорить...
Ratings: 0 negative/0 positive


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

On-line: 13 NSF  (Гостей: 12)

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