Индексът помага на SQL Server бързо да извлича данни от редове. Индексите работят като съдържанието в началото на книгите, което ви позволява бързо да търсите страницата, на която е дадена тема. Без индекси SQL Server трябва да сканира всички редове в таблица, за да намери запис.
В SQL Server има два типа индекси: клъстерни и неклъстерирани. Открийте разликата между клъстерираните и неклъстерираните индекси и защо са важни.
Клъстерен индекс в SQL Server
В клъстъриран индекс редовете с данни се съхраняват физически по подреден начин въз основа на стойността на ключа. Тъй като индексът включва таблицата и може да подрежда редове само в един ред, можете да създадете само един клъстерен индекс на таблица.
Докато индексите правят извличането на редове в диапазон по-бързо, Операции INSERT и UPDATE може да е бавен, защото оптимизаторът на заявки сканира индекса в ред, докато намери целевия индекс.
Неклъстерен индекс в SQL Server
Неклъстъриран индекс съдържа ключовите стойности, чийто запис е указател, наречен локатор на ред. За клъстерираните таблици (таблици с клъстерен индекс) указателят сочи към ключ в клъстерирания индекс, който от своя страна сочи към реда в таблицата. За редове без клъстерен индекс указателят сочи директно към реда на таблицата.
Как да създадете клъстерен индекс в SQL Server
Когато създавате таблица с първичен ключ, SQL Server автоматично създава клъстериран индексен ключ въз основа на този първичен ключ. Ако нямате първичен ключ, можете да изпълните следния оператор, за да създадете клъстериран индексен ключ.
СЪЗДАВАЙТЕ КЛУСТЕРИРАН ИНДЕКС <индексиме>
НА МАСА <име_на_таблица>(име на колона)
В този израз вие указвате името на индекса, името на таблицата, в която да го създадете, и името на колоната, което да използвате в индекса.
Ако добавите първичен ключ към таблица, която вече има клъстерен индекс, SQL Server ще създаде неклъстерен индекс с него.
За да създадете клъстериран индекс, който не включва колоната с първичен ключ, първо трябва да премахнете ограничението за първичен ключ.
ИЗПОЛЗВАНЕиме_база_данни
АЛТЕРТАБЛИЦА име_на_таблица
ИЗПУСКАЙТЕОГРАНИЧЕНИЕ pk_name
ОТИВАМ
Премахването на ограниченията на първичния ключ също премахва клъстерирания индекс, което ви позволява да създадете потребителски такъв.
Как да създадете неклъстерен индекс в SQL Server
За да създадете неклъстъриран индекс, използвайте следния оператор.
СЪЗДАВАЙТЕИНДЕКС <индексиме>
НА МАСА <име_на_таблица>(име на колона)
Можете също да използвате ключовата дума NONCLUSTERED по следния начин:
СЪЗДАВАЙТЕ [НЕКЛУСТЕРИРАН] ИНДЕКС <индексиме>
НА МАСА <име_на_таблица>(име на колона)
Този оператор създава неклъстъриран индекс в таблицата, която сте посочили, и включва колоната, която сте посочили.
Ако искате, можете да сортирате колоните във възходящ (ASC) или низходящ (DESC) ред.
СЪЗДАВАЙТЕ [НЕКЛУСТЕРИРАН] ИНДЕКС <индексиме>
НА МАСА <име_на_таблица>(име на_колона ASC/DESC)
Кой индекс да изберете?
И клъстерираните, и неклъстерираните индекси подобряват времето за заявки. Ако повечето от вашите заявки са SELECT операции на няколко колони в таблицата, групираните индекси са по-бързи. Въпреки това, за операции INSERT или UPDATE, неклъстерираните индекси са по-бързи, тъй като оптимизаторът на заявки може да намери колоната директно от индекса.
Както можете да видите, тези индекси работят най-добре за различни SQL заявки. Следователно повечето SQL бази данни ще се възползват от наличието на поне един клъстериран индекс и неклъстерирани индекси за колони, които се актуализират редовно.
Значението на индексите в SQL Server
Клъстерираните и неклъстерираните индекси водят до по-висока производителност на заявките. Когато изпълнявате заявка, оптимизаторът на заявки сканира индекса за мястото за съхранение на ред и след това извлича информация от това местоположение. Това е много по-бързо от сканирането на всички редове в таблицата.
Можете също така да използвате неклъстерирани индекси, за да разрешите блокирания при търсене на отметки, като създадете неклъстериран индекс за колони, до които заявките имат достъп.