про Total | |
---|---|
boba Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Приходится поддерживать проекты, написанные ушедшими
программистами. Довольно типовой прием там total Мое вхождение в Фокс как-то обошлось без него. Поскольку я не слишком хорошо понимаю этот оператор, пытаюсь заменить его select group by с where где беру содержание индекса и далее like '%' Все равно по скорости выполнения получается медленнее, хотя анализ плана sys(3054) показывает , что индекс используется В самом group by тоже пишу не переменные через запятую, а выражение индекса. Довольно таки странно звучит, но неведомо почему сам total у меня вызывает дичайшее раздражение еще и потому, что в кодах, что вижу, часто используются переменные, которые де факто не используются в группировании, поэтому возникает непонимание того, что именно в таком поле будет в результате. |
Re: про Total | |
---|---|
Владимир Максимов Автор Сообщений: 14095 Откуда: Москва Дата регистрации: 02.09.2000 |
Ну, без конкретного примера сложно что-то посоветовать. Только рассуждения общего плана
1. Total как и Calculate - это перебор записей в текущей рабочей области. Но! С учетом текущего активного индекса. Т.е. работа данной команды напрямую зависит от того, какой индекс активный в настоящий момент. Более того, результат может быть разным в разных условиях (активировали другой индекс - получили другой результат). Как следствие, результат может оказаться не таким, как ожидалось. Именно этот факт вызывает больше всего проблем и недопониманий. Другими словами - это "контекстно-зависимая" команда. В том смысле, что результат ее работы зависит от окружения (контекста) Команда Select-SQL никак не зависит от настроек рабочей области. Т.е. в этом смысле ее работа более предсказуемая 2. Опция Like (если символ % стоит в начале или в середине выражения для поиска) не может быть оптимизирована. Никак. Вообще. Ни при каких индексах. Оптимизация возможна только в том случае, если символ % в конце выражения для поиска. Но в этом случае это уже не собственно Like, а просто поиск по первым символам. Т.е. может быть задействован индекс 3. Если в команде Total используется директивы While, NEXT, RECORD, REST то количество строк для анализа может оказаться существенно меньше общего количества строк в таблице. На чем и можно получить существенный выигрыш производительности. Но опять же, при корректном активном индексе 4. Не надо абсолютизировать команду Select-SQL и пытаться впихнуть в один запрос сразу все условия и критерии поиска. Зачастую оказывается более выгодным сделать несколько последовательных запросов. Как с точки зрения производительности, так и с точки зрения наглядности (понятности, читабельности) 5. Возможно, более простым решение будет цикл SCAN. Т.е. все упирается в конкретную задачу. Рекомендаций-то можно много наговорить... |
© 2000-2024 Fox Club  |