Индексирование базы данных SQL - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть вопросы по поводу индексации базы данных SQL:

  1. Лучше индексировать логический столбец или нет, потому что есть только 2 варианта?я знаю, если таблица небольшая, то индексирование ничего не изменит, но я спрашиваю о таблице с 1 млн записей.
  2. Если я получил две даты ValidFrom и ValidTo, то лучше создать 1 индекс с 2 столбцами или 2 отдельнымииндексы?В 90% запросов я использую где validfrom от date, но есть также несколько вариантов выбора только с validfrom или только с validto
  3. Какая разница между кластерным и неклирегированным индексом?я не могу найти какую-либо статью, поэтому ссылка будет отличной

Ответы [ 3 ]

5 голосов
/ 27 сентября 2011

Вы оба пометили MySQL и SQL-сервер. Этот ответ вдохновлен MySQL.

  1. Это зависит от многих вещей, но более важным, чем размер, является изменение. Если около 50% значений - ИСТИНА, это означает, что остальные значения (также около 50%) являются ЛОЖЬМИ, и индекс не сильно поможет. Если только 2% значений являются ИСТИНАМИ, а для ваших запросов часто нужны только ИСТИНА, то этот индекс будет полезен !
  2. Если ваши запросы часто используют оба, поместите оба в индекс. Если одно используется больше другого, поместите это ПЕРВЫЙ в индекс, чтобы составной индекс можно было использовать и для одного поля.
  3. A кластеризованный индекс означает, что данные на самом деле находятся внутри индекса. Некластеризованный индекс просто указывает на данные, которые на самом деле хранятся в другом месте. ПЕРВИЧНЫЙ КЛЮЧ в InnoDB является кластеризованным индексом.

Если вы хотите использовать индексы в MySQL, ОБЪЯСНИТЕ ваш друг!

3 голосов
/ 27 сентября 2011

Это все для SQL Server, о чем я знаю ...

1 - зависит от количества элементов, но, как правило, это индекс для одного логического поля (BIT в SQL Server)не будет использоваться, поскольку он не очень избирателен.

2 - создайте 2 индекса, один с обоими, а другой только со вторым полем из первого индекса.Затем вас охватят в обоих случаях.

3 - Кластерные индексы содержат данные для ВСЕХ полей на уровне листа (в основном, всей таблицы), упорядоченных по полю вашего кластерного индекса.Некластеризованные индексы содержат только ключевые поля и любые поля INCLUDE d на уровне листа с указателем на строку кластеризованного индекса, если вам нужны другие данные из других полей для этой строки.

0 голосов
/ 27 октября 2013
  1. Если вы используете «Отфильтрованный индекс», количество записей до 2 миллионов без проблем.
  2. Создайте 1 некластеризованный индекс вместо 2 Отфильтрованный индекс
  3. Другойв опыте пользователя эти два аспекта не связаны между собой ничем.Индекс поиска (PK: первичный ключ) отличается от поиска диапазона значений (некластеризованный индекс, часто используемый при трассировке диапазона значений), на самом деле поиск по PK представляет менее 1% запросов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...