Индекс SQL Server, Который должен кластеризироваться?

Итак, в конце mainPage.js:

module.exports = { createWindow }

и вверху main.js

const { createWindow } = require("./mainPage") //assuming files in same dir

См. https://nodejs.org/ api / modules.html # modules_modules для получения дополнительной информации о том, как это работает.

7
задан marc_s 2 March 2010 в 19:22
поделиться

5 ответов

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

В вашем сценарии я бы предпочел поместить ключ кластеризации в столбец BIGINT, а не в столбец VARCHAR (80).

Во-первых, для столбца BIGINT достаточно просто применить уникальность (если вы не применяйте и не гарантируйте уникальность самостоятельно, SQL Server добавит 4-байтовый «uniquefier» к каждой вашей строке), и он в среднем НАМНОГО меньше, чем VARCHAR (80).

Почему размер так важен ? Ключ кластеризации также будет добавлен в КАЖДЫЙ и каждый из ваших некластеризованных индексов - поэтому, если у вас много строк и много некластеризованных индексов, то наличие 40-80 байт против 8 байт может быстро сделать ОГРОМНОЕ разница.

Также еще один совет по производительности: чтобы избежать так называемых поисков закладок (из значения в вашем некластеризованном индексе через ключ кластеризации на фактические страницы данных), SQL Server 2005 ввел понятие «включенных столбцов» в ваши некластеризованные индексы , Это очень полезно, и часто упускается из виду. Если для ваших запросов часто требуются поля индекса плюс только одно или два других поля из базы данных, рассмотрите возможность их включения для достижения так называемых «покрывающих индексов». Опять же - посмотрите отличную статью Кимберли Трипп - она ​​богиня индексации SQL Server! :-) и она может объяснить это гораздо лучше, чем я ...

Итак, подведем итог: поместите ключ кластеризации в небольшой, стабильный, уникальный столбец - и у вас все будет хорошо!

Марк

В SQL Server 2005 введено понятие «включенные столбцы» в некластеризованных индексах. Это очень полезно, и часто упускается из виду. Если для ваших запросов часто требуются поля индекса плюс только одно или два других поля из базы данных, рассмотрите возможность их включения для достижения так называемых «покрывающих индексов». Опять же - посмотрите отличную статью Кимберли Трипп - она ​​богиня индексации SQL Server! :-) и она может объяснить это гораздо лучше, чем я ...

Итак, подведем итог: поместите ключ кластеризации в небольшой, стабильный, уникальный столбец - и у вас все будет хорошо!

Марк

В SQL Server 2005 введено понятие «включенные столбцы» в некластеризованных индексах. Это очень полезно, и часто упускается из виду. Если для ваших запросов часто требуются поля индекса плюс только одно или два других поля из базы данных, рассмотрите возможность их включения для достижения так называемых «покрывающих индексов». Опять же - посмотрите отличную статью Кимберли Трипп - она ​​богиня индексации SQL Server! :-) и она может объяснить это гораздо лучше, чем я ...

Итак, подведем итог: поместите ключ кластеризации в небольшой, стабильный, уникальный столбец - и у вас все будет хорошо!

Марк

подумайте о том, чтобы включить их, чтобы достичь того, что называется «индексами покрытия». Опять же - посмотрите отличную статью Кимберли Трипп - она ​​богиня индексации SQL Server! :-) и она может объяснить это гораздо лучше, чем я ...

Итак, подведем итог: поместите ключ кластеризации в небольшой, стабильный, уникальный столбец - и у вас все будет хорошо!

Марк

подумайте о том, чтобы включить их, чтобы достичь того, что называется «индексами покрытия». Опять же - посмотрите отличную статью Кимберли Трипп - она ​​богиня индексации SQL Server! :-) и она может объяснить это гораздо лучше, чем я ...

Итак, подведем итог: поместите ключ кластеризации в небольшой, стабильный, уникальный столбец - и у вас все будет хорошо!

Марк

8
ответ дан 6 December 2019 в 09:22
поделиться

quick 'n dirty:

Поместить кластерный индекс в:

  • столбец, значения которого (почти) никогда не меняются

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

  • столбец, в котором вы выполняете диапазон - поиск

5
ответ дан 6 December 2019 в 09:22
поделиться

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

2
ответ дан 6 December 2019 в 09:22
поделиться

Вот лучшее обсуждение , которое я нашел по этой теме. Кимберли Трипп - блогер MS, который остается в центре дискуссии. Я мог бы истолковать это для вас, но вы, очевидно, не понимаете основных слов и понятий, и статья очень удобочитаема. Так что наслаждайтесь!

Подсказка: вы обнаружите, что короткие ответы почти всегда слишком упрощены.

3
ответ дан 6 December 2019 в 09:22
поделиться

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

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

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

Редактировать: На MSDN есть довольно хорошая статья, которая объясняет, что SHOW_STATISTICS предоставляет вам. Я, конечно, не администратор Uber, но большая часть информации, которую я здесь предоставил, была получена из рекомендаций нашего DBA:)

Вот статья: http: // msdn. microsoft.com/en-us/library/ms174384.aspx

2
ответ дан 6 December 2019 в 09:22
поделиться
Другие вопросы по тегам:

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