Centaur
14:17 18-04-2002 Третья заповедь разработчика
Не навешай ярлыка на инструмент твой.

Задача. Сделать браузер/редактор для двух таблиц, связанных отношением master/detail. Инструменты: Delphi 5, Interbase Firebird 0.9.4.

Легко. Но мы же типа учёные, мы не будем вешать две TTable, как на втором курсе с Paradox’ом. Сделаем как белые люди, TQuery, TUpdateSQL, cached updates, все дела.

Угу, сделали. Фигачим в таблицу миллион записей. Давим Ctrl+End… Пц. BDE начинает засасывать весь миллион в память. Task Manager показывает линейный рост занятой памяти… кривая доходит до потолка… всё грохается.

Отлично. Меняем BDE на Interbase Express. Давим Ctrl+End. То же самое.

Плюём на принципы, выкашиваем Query и UpdateSQL, вешаем два TTable. Ctrl+End. В SQL Monitor’е видим красивый запрос SELECT * FROM table2 WHERE условия ORDER BY поле1 DESC, поле2 DESC. Типа, сейчас всё на сервере отсортируем по убыванию, стащим 10 первых записей, покажем в grid’е. Вот только в %temp%’е рождается и начинает дико расти файл с говорящим именем ib_sort_####…

CREATE DESCENDING INDEX имя ON table2 (поле1, поле2);

Запускаем. Ctrl+End. Отрабатывает влёт! Пробуем добавить запись. Минута молчания… запись добавлена. Всё работает.
Комментарии:
Манни
13:51 24-04-2002
Если не сложно, сделай, пожалуйста, для меня эксперимент: удали этот индекс и сделай такой же, но без DESCENDING. Изменится скорость?
Centaur
15:37 30-04-2002
Манни
Я забыл сказать, что ASCENDING индекс уже был. Та самая ситуация, когда в %temp%’е возникал дикорастущий ib_sort_####. То есть в этом случае как раз нужны оба индекса, ASC и DESC. Хорошо в Oracle с этим, там один индекс может использоваться в обе стороны.
Манни
13:05 10-05-2002
Спасибо.