Проблема с большими таблицами (первичный ключ недоступен)

Tabe1 имеет около 10 записей Lack (1 миллион) и не содержит первичного ключа. Извлечение данных с помощью SELECT команда (с определенным WHERE состояние) занимает много времени. Можем ли мы сократить время поиска, добавив первичный ключ в таблицу, или нам нужно использовать любые другие способы сделать то же самое. Пожалуйста, помогите мне.

5 ответов

Решение

Первичный ключ не оказывает прямого влияния на производительность. Но косвенно это так. Это связано с тем, что при добавлении первичного ключа в таблицу SQL Server создает уникальный индекс (кластеризованный по умолчанию), который используется для обеспечения целостности объекта. Но вы можете создавать свои собственные уникальные индексы для таблицы. Таким образом, строго говоря, первичный индекс не влияет на производительность, но индекс, используемый первичным ключом, влияет.

КОГДА ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ ПЕРВИЧНЫЙ КЛЮЧ?

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

Чтобы ваши SELECTs работали быстро, вы должны рассмотреть возможность добавления индекса в соответствующие столбцы, которые вы используете в WHERE.

Например, чтобы ускорить SELECT * FROM "Customers" WHERE "State" = 'CA' нужно создать индекс на State колонка.

Primarykey не поможет, если у вас нет Primarykey для определения причины.

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

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

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

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

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

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

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

Подробнее: Преимущества использования индексов в базе данных?

Другие вопросы по тегам