Dacă vrei să vezi cât spaţiu este alocat pentru fiecare index non-clustered al unei tabele, poţi folosi ceva de genul:
SELECT indid, name, dpages*8 as allocated_kb, used*8 as used_kb
FROM sysindexes WHERE id=object_id('Nume tabela')
AND INDEXPROPERTY(id,name,'IsStatistics')=0
AND indid NOT IN (0,1,255)
Pentru mai multe informaţii, vezi topicul referitor la sysindexes din Books Online. Totuşi, din pagina respectivă nu este foarte clar care e diferenţa dintre coloanele dpages, reserved şi used (şi care dintre ele conţine informaţia care contează cu adevărat). De exemplu, dacă execut următorul query în baza de date pubs:
EXEC sp_spaceused 'titleauthor'
SELECT indid, name, dpages, reserved, used
FROM sysindexes WHERE id=object_id('titleauthor')
AND INDEXPROPERTY(id,name,'IsStatistics')=0
obţin următoarele rezultate:
name rows reserved data index_size unused
------------------------- ----------- ---------- ------- ------------ ------
titleauthor 25 56 KB 8 KB 48 KB 0 KB
indid name dpages reserved used
------ ------------------------- ----------- ----------- -----------
1 UPKCL_taind 1 7 7
2 auidind 1 2 2
3 titleidind 1 2 2
Dacă încercăm să adunăm valorile din oricare din cele trei coloane şi să înmulţim cu 8 KB (dimensiunea unei pagini), nu obţinem nicicum spaţiul raportat la index_size. Singurul mod de a ajunge la această valoare este să calculăm (used-dpages)*8, pentru indexul cu id-ul 1 (care e oarecum formula pe care o regăsim şi dacă facem un EXEC sp_helptext 'sp_spaceused'). Deci, cel puţin în SQL Server 2000, nu am găsit o metodă de a obţine informaţii foarte clare şi foarte exacte despre spaţiul ocupat de fiecare index, dar oricum, query-ul de mai sus furnizează nişte rezultate orientative destul de corecte.
Răzvan