Производительность SQL Server с большой таблицей - PullRequest
1 голос
/ 21 марта 2011

Я ищу несколько советов для структуры таблицы в sql.

В основном у меня будет таблица с примерно 30 столбцами строк, целых и десятичных чисел.Служба будет писать в эту таблицу около 500 раз в день.Каждая запись в таблице может быть «неактивной» или «активной».Эта таблица будет постоянно расти, и в любой момент будет около 100 «активных» записей, которые необходимо вернуть.

Несмотря на то, что таблица мала, производительность, возвращающая «активные» записи, отзывчива.Мое беспокойство наступает через 12-18 месяцев, когда таблица становится намного больше или даже позже, когда в таблице будут миллионы записей.

Лучше ли поддерживать две таблицы: одну для «активных» записей и одну для «неактивных» записей из представления производительности, или создание индекса для активного столбца решит любые потенциальные проблемы с производительностью?

Ответы [ 3 ]

5 голосов
/ 21 марта 2011

Конечно, будет более производительным иметь маленький «активный» стол.Наиболее очевидной ценой является то, что правильное ведение записей более проблематично, чем с одной таблицей.Я бы, вероятно, не сделал бы это сразу, но учту это как потенциальную оптимизацию.

Индекс в активном столбце значительно улучшит ситуацию.Более того, будет ли индекс из нескольких столбцов (или индексы) соответствовать наиболее часто используемому запросу (или запросам).Например, если вы часто запрашиваете активные строки, созданные после определенной даты, то для получения можно использовать индекс как для даты, так и для активной.Аналогично, если вы хотите, чтобы все активные строки были упорядочены по идентификатору, то можно было бы использовать одну и для идентификатора, и для активной.

Тестирование с помощью помощника по настройке ядра СУБД здесь может быть очень информативным, но не настолько хорошим, чтобы предсказывать, что лучшеподход к данным, которые вы ожидаете изменить в ближайшие месяцы - как вы делаете здесь.

Индексированное представление вполне может быть вашим лучшим подходом, поскольку таким образом вы можете создать наиболее близкую вещь к частичному индексу, который доступен вSQLServer 2005 (который ваши теги предполагают, что вы используете).См. http://technet.microsoft.com/en-us/library/cc917715.aspx#XSLTsection124121120120 Это создаст индекс на основе ваших общих критериев поиска / объединения / порядка, но только по соответствующим строкам (полностью игнорируя остальные).

Еще лучше, если вы можете использовать SQLServer2008, затем используйте отфильтрованный индекс (то, что Microsoft решила назвать частичными индексами).См. http://technet.microsoft.com/en-us/library/cc280372.aspx, чтобы узнать больше о них.

Если бы вы отметили 2008, а не 2005, я бы определенно предложил бы отфильтрованные индексы, как я бы, вероятно, выбрал индексированное представление, номожет просто пойти на многостолбцовый индекс.

4 голосов
/ 21 марта 2011

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

365 дней, умноженное на 500 - 182500, и вы написали

миллионов записей в таблице

, но только с 500 в день это займет одиннадцать лет.

1 голос
/ 21 марта 2011

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

...