У меня нет упоминаний об этом, только опыт / неподтвержденные данные.
Во-первых, запросы почти всегда можно улучшить с помощью индексов. Точная выгода зависит от запроса.
- Если для запроса требуются только определенные записи / небольшая часть таблицы, индекс поможет
- Если запрос требует всю таблицу, но может извлечь выгоду из упорядоченных данных, индекс поможет
Кластерные индексы обычно предоставляют преимущества в производительности по сравнению с некластеризованными индексами. В очень упрощенном смысле использование некластеризованного индекса похоже на использование двух таблиц и их объединение (сначала используется дружественный поиску индекс, который затем присоединяется к самим данным - если только индекс не содержит все необходимые поля данных).
Однако здесь рассматривается порядок, в котором данные добавляются в вашу таблицу. Если ваш кластеризованный индекс означает, что данные часто вставляются или удаляются в середине таблицы, вы получите фрагментацию и другие артефакты. Однако, по моему опыту, осознание и рассмотрение этого вопроса необходимо только в экстремальных ситуациях.
Короче, определенно индексируйте свои данные. И кластерный индекс обычно лучше всего подходит для обслуживания ваших худших запросов.
Что касается разницы между VARCHAR и CHAR? В прежние времена было важно хранить поля переменной длины в конце ваших данных, чтобы было легче идентифицировать поля фиксированной длины. Это означало, что иметь поле VARCHAR в качестве первого поля и использовать его в качестве уникального идентификатора было довольно плохо.
В настоящее время разница в производительности незначительна. Лично я все равно оставляю уникальные идентификаторы фиксированной длины. Данные с переменной длиной обычно не имеют заметных затрат на производительность, но когда вы на самом деле проводите сравнения для предикатов соединения и т. Д., Гораздо удобнее иметь поля фиксированной длины, если это возможно.