Имам база данни, в която изпълнявам профилиране исъветник на базата данни за подобряване на работата на базата данни. Направих и досега добре, съветникът ми представи много индекси и статистики, които могат да бъдат създадени, за да получат по-добра производителност. Но четейки изявленията, в които се сблъсках:
CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K3_K7_K1_K5] ON [dbo].[xinfobaseacl]
(
[lviewid] ASC,
[lparentid] ASC,
[lid] ASC,
[xlactor] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K7_K5_K1_K3] ON [dbo].[xinfobaseacl]
(
[lparentid] ASC,
[xlactor] ASC,
[lid] ASC,
[lviewid] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
Същата таблица, същите колони, същите параметри, просто друг ред на сортиране на колоните ...
Така че аз съм объркан, дали редът на сортиране наистина има значение в създаването на индекс ???
Отговори:
2 за отговор № 1Да редът на колоните в съставния индекс е от значение.
И двете ще работят еднакво добре за предиката за равенство във всички 4 колони.
Но първата ще подкрепи заявки като
WHERE lviewid = 1 AND lparentid 1 AND lid = 1
ORDER BY xlactor
А втората ще подкрепи заявки като
WHERE parentid = 1 AND xlactor = 1
ORDER BY lid, xlactor
Дали трябва да създадете и двата индекса зависи от натоварването ви. Подадохте ли DTA на представително работно натоварване, включително изявления за промяна на данните?
1 за отговор № 2
Вие "обърквате терминологията. Редът за сортиране няма голям, ако има такъв, засяга, но редът на колоните в индекса може да бъде важен.
Правилният ред на колоните за съставния индекс зависи от заявката ви, но като основно правило колоната с най-малко различни стойности трябва да бъде първа.