право на создание индекса - PullRequest
1 голос
/ 29 августа 2009

Я создал скрипт, чтобы найти селективность каждого столбца для каждой таблицы. В некоторых таблицах с менее чем 100 строками, но селективность столбцов составляет более 50%. где селективность = разные значения / общее количество строк

Итак, эти столбцы имеют право на индекс? Или, вы можете сказать, сколько минимальных строк требуется для права на создание индекса?

Ответы [ 3 ]

4 голосов
/ 29 августа 2009

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

На самом деле, для некоторых запросов значение «Селективность» может быть очень низким, индекс все равно будет очень полезным. Например:
Предположим, что таблица «Входящие» с миллионами строк, эти строки имеют логическое поле « Read ». В этом случае различные значения по количеству строк будут действительно низкими. Если большинство элементов читается большую часть времени, поиск непрочитанных элементов с индексом в этом поле будет очень эффективным.

Создание индексов индекса происходит за плату. Хотя вы получаете выгоду от чтения, вы платите за запись и использование диска.

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

2 голосов
/ 29 августа 2009

Вы можете создать индекс для таблицы с 0 строками, 1 строкой или 100 миллионами строк. Вы можете создать индекс, в котором каждый столбец имеет одинаковое или уникальное значение.

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

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

0 голосов
/ 30 августа 2009

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

Если у вас есть столбец «пол» и примерно 50% значений - «мужской» и примерно 50% - «женский», то наличие индекса, который на самом деле вам мало, - SQL Server и большинство других СУБД будут Скорее всего, в этом случае все еще выполняется полное сканирование таблицы, поскольку в среднем им все равно придется сканировать по крайней мере половину таблицы, поэтому «обходной» путь сначала с использованием индекса, а затем поиск фактических полных данных на основе этого значение индекса просто не стоит.

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

Но определенно есть какая-то помощь - лучший источник, который я знаю, это превосходные сообщения в блоге Кимберли Триппа по индексированию SQL Server (и многие другие темы).

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...