Индексы первичного ключа - PullRequest
0 голосов
/ 26 июня 2018

Поиск в столбце первичного ключа в таблице выполняется быстрее, чем в столбце без первичного ключа из-за кластерного индекса по умолчанию для первичных ключей в SQL Server?

Ответы [ 4 ]

0 голосов
/ 26 июня 2018

Выполняет ли поиск столбца первичного ключа в таблице быстрее, чем поиск столбец без первичного ключа из-за кластерного индекса по умолчанию на первичном ключи в SQL Server?

Поскольку оптимизатору все равно, поддерживает ли индекс ограничение или нет, я перефразирую вопрос следующим образом:

Выполняет ли поиск с использованием столбцов ключей кластерного индекса быстрее, чем поиск через столбец (ключи) некластеризованного индекса?

Поиск по кластерному индексу на основе таблицы на диске - это самый быстрый способ вернуть всю строку 1) для одноэлементных поисков и 2) для поиска по ключевому диапазону. Это минимизирует количество логических операций чтения, необходимых для поиска и извлечения строк.

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

Это не означает, что первичным ключом всегда должен быть кластерный индекс. Может быть лучший выбор, когда запросы чаще всего используют другие столбцы в предикатах предложения join / where.

0 голосов
/ 26 июня 2018

из предыдущего вопроса;«Причина, по которой мы указываем ключи для таблицы, заключается, прежде всего, в улучшении целостности данных и их полезности. Ключи гарантируют, что в таблице нет дубликатов данных, и поэтому они позволяют пользователю / потребителю данных правильно идентифицировать информацию. Оптимизаторы запросов СУБДи механизмы хранения спроектированы так, чтобы использовать преимущества ключей, поэтому наличие ключа также даст вашей СУБД наилучшую возможность эффективно выполнять некоторые запросы, но нет гарантии, что добавление ключа улучшит производительность в каждом случае "

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

0 голосов
/ 26 июня 2018

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

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

0 голосов
/ 26 июня 2018

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

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