Что столбцы обычно делают хорошими индексами?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

90
задан Community 23 May 2017 в 12:03
поделиться

11 ответов

Лучший индекс зависит от содержания таблицы и что Вы пытаетесь выполнить.

Взятый пример членская база данных с Первичным ключом членского социального обеспечения Numnber. Мы выбираем S.S., потому что основное приложение относится к человеку таким образом, но Вы также хотите создать поисковую функцию, которая использует членское имя и фамилию. Я тогда предложил бы создать индекс по тем двум полям.

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

0
ответ дан Joseph 24 November 2019 в 07:05
поделиться

Старое эмпирическое правило было столбцами, которые используются много в том, ГДЕ, ORDER BY, и пункты GROUP BY или любой, который, казалось, часто использовался в соединениях. Следует иметь в виду, что я посылаю к индексам, НЕ Первичному ключу

Не дать ответ 'выхода ванили', но он действительно зависит от того, как Вы получаете доступ к данным

0
ответ дан curtisk 24 November 2019 в 07:05
поделиться

Это должно быть еще быстрее при использовании GUID. Предположим, что у Вас есть записи

  1. 100
  2. 200
  3. 3000
  4. ....

, Если у Вас есть индекс (двоичный поиск, можно найти физическое местоположение записи, которую Вы ищете в O (LG n) время, вместо того, чтобы искать последовательно O (n) время. Это вызвано тем, что Вы не знаете то, что записывает Вас, имеют в Вас таблицу.

0
ответ дан Milhous 24 November 2019 в 07:05
поделиться

Ваш первичный ключ должен всегда быть индексом. (Я был бы удивлен, не было ли это автоматически индексировано SQL MS на самом деле.) Вы должны также столбцы индекса Вы SELECT или ORDER часто; их целью является и быстрый поиск единственного значения и более быстрая сортировка.

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

1
ответ дан Eevee 24 November 2019 в 07:05
поделиться

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

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

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

3
ответ дан Ash 24 November 2019 в 07:05
поделиться

Типы числовых данных, которые заказаны в порядке возрастания или убывания, являются хорошими индексами по нескольким причинам. Во-первых, числа обычно быстрее для оценки, чем строки (varchar, символ, nvarchar, и т.д.). Во-вторых, если Ваши значения не заказаны, строки и/или страницы, возможно, должны быть переставлены собирающийся обновление Ваш индекс. Это дополнительно служебный.

, Если Вы используете SQL Server 2005 и набор при использовании uniqueidentifiers (гуиды), и НЕ нуждаетесь в них, чтобы быть случайной природы, проверить последовательный тип uniqueidentifier.

Наконец, если Вы говорите о кластерных индексах, Вы говорите о виде физических данных. Если у Вас есть строка как Ваш кластерный индекс, который мог бы стать ужасным.

1
ответ дан Ian Suttle 24 November 2019 в 07:05
поделиться

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

Это включает: внешние ключи -

select * from tblOrder where status_id=:v_outstanding

описательные поля -

select * from tblCust where Surname like "O'Brian%"

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

select * from tblOrder where paidYN='N'
4
ответ дан nawfal 24 November 2019 в 07:05
поделиться

В целом (я не использую mssql, так не может прокомментировать конкретно), первичные ключи делают хорошие индексы. Они уникальны и должны были определить значение. (Кроме того, первичные ключи делают такие хорошие индексы, что им обычно создавали индекс автоматически.)

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

Мое предложение не должно было бы использовать индексы первоначально и представить Ваши запросы. Если особый запрос (такой как поиск людей фамилией, например) выполняется очень часто, попытайтесь создать индекс по атрибутам relevate и профилю снова. Если существует значимое ускорение на запросах и незначительное замедление на вставках и обновления, сохраните индекс.

(Извинения, если я повторяю материал, упомянутый в Вашем другом вопросе, я не столкнулся с ним ранее.)

5
ответ дан Zooba 24 November 2019 в 07:05
поделиться

Все это зависит, на каких запросах Вы ожидаете спрашивать о таблицах. Если Вы просите все строки с определенным значением для столбца X, необходимо будет сделать полное сканирование таблицы, если индекс не может использоваться.

Индексы будут полезны если:

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

Они не будут полезны если:

  • Вы выбираете большой % (> 10-20%) строк в таблице
  • , использование дополнительного пространства является выпуском
  • , который Вы хотите максимизировать, вставляют производительность. Каждый индекс на таблице уменьшает, вставляют и обновляют производительность, потому что они должны быть обновлены каждый раз изменения данных.

столбцы Первичного ключа являются обычно замечательными для индексации, потому что они уникальны и часто привыкли к строкам поиска.

7
ответ дан Plasmer 24 November 2019 в 07:05
поделиться

Некоторые люди ответили на подобный вопрос здесь: , Как Вы знаете, каков хороший индекс?

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

Также рассматривают вид индекса, который Вы делаете - B-деревья хороши для большинства вещей и позволяют запросы диапазона, но хешируют индексы, получают Вас прямо к точке (но не позволяйте диапазоны). Другие типы индексов имеют другие за и против.

Удачи!

18
ответ дан Community 24 November 2019 в 07:05
поделиться

Это действительно зависит от Ваших запросов. Например, если Вы почти только пишете в таблицу тогда, лучше не иметь любые индексы, они просто замедляют записи и никогда не привыкают. Любой столбец, который Вы используете для присоединения к другой таблице, является хорошим кандидатом на индекс.

кроме того, читайте о функции Missing Indexes. Это контролирует фактические запросы, используемые против Вашей базы данных, и может сказать Вам, какие индексы улучшили бы производительность.

3
ответ дан jwanagel 24 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

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