(изменено: Slava.Coder.Vrn, 23 сентября 2008г. 23:00:12)

Тема: Полезная находка: оптимизация индексов в базе TDMS

Некоторое время назад начал замечать, что помещенные на формы ввода объектов выборки с опцией "искать во всех входящих" начали ощутимо притормаживать. Недели 2 назад пользователи уже начали выть и грозить лютой расправой, потому как формы с такими выборками начали открываться по минуте и больше.
Пришлось вооружиться профайлером от MS SQL Server и Managment Studio. И вот что я обнаружил. База начинает капитально тормозить при сильной дефрагментации индекса IX_TAttr_ObjId на таблице TAttr. Лучше всего пересоздать все индексы в базе через SQL Server Managment Studio. Кстати, того же эффекта можно добиться запустив администратор TDMS и выбрав "обновить базу - сохранить содержимое базы" (именно этот пункт, а не тот который Quick).
После таких манипуляций выполнение этих выборок стало занимать 5-6 секунд.
Но главное, анализ запросов (и подсказка одного моего очень продвинутого в SQL друга  :) ) показал, что целесообразно, в дополнение к уже существующим, создать еще один индекс на таблице TAttr: по полям F_ATTRDEFID и F_OBJID

create index [IX_TAttr_ObjId1] ON [dbo].[TAttr] ([F_ATTRDEFID], [F_OBJID])

Я, честно говоря, фиг знаю как это работает, но после создания этого индекса выборки "искать во всех входящих" на формах объектов ваще отрабатывают меньше чем за 1 сек!!!
Надеюсь, это кому-нить пригодится  :)
PS: если что, у нас в таблице TAttr чуть больше 1,8 млн записей. Если у вас меньше, вряд ли вас пока беспокоят такие проблемы  :)