Тема: Полезная находка: оптимизация индексов в базе 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 млн записей. Если у вас меньше, вряд ли вас пока беспокоят такие проблемы :)