Занят таблица, индексировать или не индексировать - PullRequest
2 голосов
/ 29 мая 2011

SQL Server, очень занятая таблица, в любое время поддерживает активность около 6-10 тысяч пользователей и имеет вставки / обновления / удаления при каждом попадании.

Я не использовал индекс этой таблицы в качестве каких-либо данныхнаписано не дольше 10 минут.

Но, наблюдая за монитором активности, я заметил, что SQL Server предлагает добавить индекс к этой таблице.

Я знаю, что хранение индекса в таблице имеет свои затраты. Как вы думаете, мне следует добавить индекс?

Обновление сведений: SQL 2008 R2

Таблица

     [id] [bigint] IDENTITY(1,1) NOT NULL,
     [siteid] [int] NOT NULL,
     [last_seen] [datetime] NOT NULL,
     [ua] [varchar](250) NOT NULL,
     [ip] [varchar](15) NOT NULL,
     [t_id] [int] NOT NULL

Предлагаемый индекс

ON [dbo].[onlines] ([ua],[ip],[t_id])

Ответы [ 3 ]

3 голосов
/ 29 мая 2011

Наличие хорошего ключа кластеризации может на самом деле ускорить даже ваши вставки (прочитайте превосходное сообщение в блоге Кимберли Триппа Дискуссия о кластеризованном индексе продолжается для хорошего и тщательного объяснение, почему это так)! И, судя по всему, у вас вообще нет ключа кластеризации.

Поэтому я бы определенно рекомендовал добавить первичный / кластеризационный ключ в ваш столбец id - он идеально подходит для хорошего кластеризационного ключа: узкий, статический, уникальный, постоянно увеличивающийся:

CREATE UNIQUE CLUSTERED INDEX CIX_YourTableName
  ON dbo.YourTableName(ID)

Это должно ускорить все - вставлять, обновлять, удалять и выбирать тоже.

Нужны ли вам дополнительные индексы (и какие столбцы для индексации) зависит от ваших запросов SELECT - поскольку вы на самом деле ничего не сказали нам о них, мы можем только догадываться об этом .....

В основном, что вам нужно сделать:

  • установить базовую линию - измерить производительность
  • затем примените индекс, который имеет смысл - включите столбцы, используемые в предложениях WHERE и / или выражениях ORDER BY
  • снова измерить и сравнить

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

1 голос
/ 29 мая 2011

Время существования данных не говорит вам о необходимости индексации.Но скорость обновления против чтения делает.Вставки самые быстрые без индекса.Обновления и удаления могут быть нет, потому что они могут извлечь выгоду из наличия индекса при поиске записи для изменения.Выбирает также выгоду от наличия индекса.

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

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

1 голос
/ 29 мая 2011

Добавление индекса стоит во время записи в таблицу.Операции INSERT, UPDATE, DELETE.Это может улучшить производительность при чтении (операции SELECT, UPDATE, DELETE).Итак, если у вас больше операций чтения, чем записи, то да, индекс может вам помочь.Если вы читаете намного меньше, чем пишете, индекс может помочь вам, поскольку вам не нужно читать слишком много (индекс - это, по сути, небольшое подмножество таблицы, и если ваш выбор касается только этого подмножества, вы можете ускорить чтениев некоторых случаях значительно)

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

...