Вопрос по sql, tsql, sql-server, sql-server-2005 – Индексированное представление против индексов в таблице

25

У меня есть следующая таблица:

EVENT_LOG

EVENT_ID: pk, int, not null
TYPEID: fk, int, not null
CATEGORYID: fk, int, null
SOURCE: varchar(255), null
DESCRIPTION: varchar(4000), null
CREATED: datetime, null

Мы'Мы создали отчет и обнаружили, что производительность - отстой. Нет'любые индексы кроме кластерного. Мы могли бы создать их, но потому что эта таблица записана больше, чем она читается - тамС точки зрения производительности взвешивания. Для отчетности яЯ склонен ставить индексы на каждый столбец, потому что источник & В столбцах описания необходимо искать подстроки.

Мы задавались вопросом, еслииндексированное представление (AKA материализованное представление) было бы вариантом, где индексированное представление будет содержать все столбцы изEVENT_LOG таблицы, но имеют соответствующие индексы, созданные в представлении. Получит ли это нам производительность для отчетности, не влияя на записи вEVENT_LOG Таблица?

Вы также можете улучшить производительность поиска по подстроке, индексируя текстовые столбцы в обратном порядке. Matthew
Я полагаю, ты'Для отчетов лучше использовать копию рабочей таблицы, например, реплицированную копию, которую выd Заполните изменения от ежедневных операций, скажем, раз в ночь, и тогда вы можете иметь любое количество индексов для ускорения отчетности. marc_s

Ваш Ответ

5   ответов
3

Я бы подумал, что это все равно повлияет на производительность, так как индексы в материализованном представлении необходимо обновить в какой-то момент - это, вероятно, неТ нужно быть синхронным с записью в таблицу, хотя.

Лично я бы поместил индексы в таблицу и сам измерил производительность записи. Вы можете догадаться о том, насколько медленными будут записи с индексами, но пока вы на самом деле не измерите это, вы 'просто спекулировать. Это может вообще ничего не изменить ».

3

 Источник & В столбцах описания необходимо искать подстроки. "

При поиске подстрок в столбцах varchar () SQL Server не собирается использовать какие-либо индексы (даже если вы копируете таблицу и создаете индексы). Индексы не используются, если в начале поиска используется дикий символ. строка

Я думаю, лучше создать полнотекстовый индекс наИсточник ' а также 'Описание' , если вам нужно искать в них подстроки.

Поэтому я бы предложил создать полнотекстовый индекс для столбцов varchar () и сделать отслеживание изменений как ручное и запускать его каждый час или около того, когда нет DML ..., что уменьшит нагрузку на операторы INSERT

25

Индексированное представление вызовет те же проблемы, что и индекс для столбца, поскольку индексированные представления требуютwith schemabinding, которые привязывают его к таблице напрямую, не позволяя вам изменять / изменять схему этой таблицы каким-либо образом, по форме или по форме. Это включает в себя изменение размера столбца (например, изvarchar(50) вvarchar(255)), меняя столбецтип данных (например, изdouble вdecimal(18,5)) и т. д.видел, что они вызывают много неожиданных головных болей из-за этого факта.

Я предлагаю настроить хранимую процедуру или пакет служб SSIS, которые создадут для вас таблицу отчетности ».работает каждый час или около того. Таким образом, вы можете индексировать вечно любящий ад и наслаждаться всеми преимуществами производительности, которые он дает. Я не согласен с сообщениями из действующей системы. Я'На самом деле нам еще предстоит увидеть случай, когда это необходимо. Для отчетности, часовая информация обычно абсолютно достаточна для выполнения работы.

Не то чтобыЕсть ли какие-либо ближайшие планы по изменению информации, связанной с типом данных, но после этогоТ обновление статистики позаботится о вещах? Я согласен с вами и marc_s в том, что репликация в другую таблицу, вероятно, является наилучшим вариантом. OMG Ponies
Увидев шаблон CQRS, Уди Дахан хорошо справляется с этим:udidahan.com/2009/12/09/clarified-cqrs BlackICE
1

Нет, если вы будете писать, если часто, как выу вас будет стоимость исполнения индекса в вашем материализованном представлении. Материализованные представления больше подходят для данных, которые часто не меняются.

1

Я столкнулся с подобной проблемой. Решил добавить многостолбцовый индекс против советов DBA. На моей машине для разработки и на сервере (с разрешениями администратора баз данных) производительность записи увеличилась, а отчеты были значительно быстрее (в 17 раз), чем при создании индексов для отдельных столбцов. Почему я неЯ не знаю, так как я не администратор, но я знаю основы, и иногда это помогает вам видеть сквозь лес / деревья. Поэтому я согласен с Эриком Пертроэлье: вы должны добавлять индексы и измерять производительность записи и даже измерять производительность чтения.

Похожие вопросы