İndekslər. SQL Sql unikal indeksindəki indekslər




Və indekslər, bu xüsusi axtarış masaları, verilənlər bazası axtarış mühərriki məlumatların axtarışını sürətləndirmək üçün istifadə edə bilər. Sadəcə olaraq, indeks cədvəldəki məlumatların göstəricisidir. Verilənlər bazasındakı indeks kitabın arxasındakı indeksə çox bənzəyir.

Məsələn, müəyyən bir mövzuda kitabın bütün səhifələrinə keçidlər istəyirsinizsə, əvvəlcə bütün mövzuları əlifba sırası ilə sadalayan və sonra bir və ya daha çox xüsusi səhifə nömrələrinə istinad edən indeksə müraciət edin.

İndeks sorğuları və cümlələri sürətləndirməyə kömək edir, lakin ifadələrlə məlumatların daxil olmasını ləngidir YENİLƏNİBINSERT. İndekslər verilənlərə təsir etmədən yaradıla və ya silinə bilər.

İndeksin yaradılması bəyanatı əhatə edir İNDEKSİ YARATIN, bu, cədvəli və hansı sütun və ya sütunların indeksləşdiriləcəyini müəyyən etmək və indeksin artan və ya azalan sırada olmasını göstərmək üçün indeksi adlandırmağa imkan verir.

İndekslər də məhdudiyyətlə unikal ola bilər UNİKAL, beləliklə, indeks sütunda və ya üzərində indeksi olan sütunların birləşməsində təkrarlanan girişlərin qarşısını alır.

CREATE INDEX əmri

Əsas sintaksis İNDEKSİ YARATIN göstərildiyi kimi:

CREATE INDEX index_name ON table_name;

Tək sütunlu indekslər

Cədvəlin yalnız bir sütununda bir sütunlu indeks yaradılır. Əsas sintaksis aşağıdakı kimidir.

CREATE INDEX index_name ON table_name(column_name);

Unikal indekslər

Unikal indekslər yalnız əməliyyat üçün deyil, həm də məlumatların bütövlüyünü təmin etmək üçün istifadə olunur. Unikal indeks hər hansı dublikat dəyərin cədvələ daxil edilməsinə imkan vermir. Əsas sintaksis aşağıdakı kimidir.

Cədvəl_adında UNİKAL İNDEKS indeks_adı YARADIN(sütun_adı);

Kompozit indekslər

Mürəkkəb indeks cədvəlin iki və ya daha çox sütununda olan indeksdir. Onun əsas sintaksisi aşağıdakı kimidir.

CREATE INDEX index_name cədvəl_name(column1, column2);

Tək sütunda və ya kompozit indeksdə indeks yaratmağınızdan asılı olmayaraq, filtr şərti kimi WHERE sorğusunda çox tez-tez istifadə edə biləcəyiniz sütun(ları) nəzərə alın.

İstifadədə yalnız bir sütun varsa, bir sütunda indeks seçilməlidir. WHERE bəndində filtr kimi tez-tez istifadə olunan iki və ya daha çox sütun varsa, kompozit indeks daha yaxşı seçim olardı.

Gizli İndekslər

Gizli indekslər obyekt yaradılan zaman verilənlər bazası serverində avtomatik olaraq yaradılan indekslərdir. İndekslər avtomatik olaraq əsas açar və unikal məhdudiyyət üzərində yaradılır.

DROP INDEX əmri

İndeks SQL əmrindən istifadə edərək silinə bilər DAMCI. İndeksi silərkən diqqətli olmalısınız, çünki performans daha yavaş və ya daha yaxşı ola bilər.

Əsas sintaksis aşağıdakı kimidir:

DROP INDEX indeks_adı;

İndekslərdə bəzi real nümunələri görmək üçün INDEX məhdudiyyət nümunəsinə baxa bilərsiniz.

İndekslərdən nə vaxt çəkinmək lazımdır?

İndekslər verilənlər bazası performansını yaxşılaşdırmaq üçün nəzərdə tutulsa da, onlardan qaçınmaq lazım olan vaxtlar var.

Aşağıdakı təlimatlar indeksdən istifadənin nə vaxt yenidən nəzərdən keçirilməli olduğunu göstərir.

  • İndekslər kiçik cədvəllərdə istifadə edilməməlidir.
  • Tez-tez böyük yeniləmə və ya daxiletmə əməliyyatları olan cədvəllər.
  • İndekslər çox sayda null dəyəri olan sütunlarda istifadə edilməməlidir.
  • Tez-tez manipulyasiya edilən sütunlar indeksləşdirilməməlidir.
  • 4. Verilənlər bazasına texniki qulluq
  • sql Server 2000 tərəfindən istifadə edilən əməliyyat sistemi faylları:
  • Verilənlər bazasının strukturu
  • 5.MicrosoftSqlServer2000-in quraşdırılması
  • SQL Server quraşdırma məhdudiyyətləri
  • Mövzu III. Verilənlər bazası ilə işləmək, indekslərin və açarların yaradılması və istifadəsi
  • 1. Verilənlər bazaları və onların xassələri
  • Verilənlər bazası və verilənlər bazası serverinə daxil olmaq üçün istifadə olunan rolların təsviri
  • Əlavə verilənlər bazası konfiqurasiya seçimləri
  • Verilənlər bazasına giriş parametrlərinin konfiqurasiyası
  • 2. Verilənlər bazası cədvəlləri.
  • 3. Sql serverində istifadə olunan məlumat növləri
  • Mətn məlumat növləri
  • Tarix və Saat Məlumat Növləri
  • Böyük həcmdə məlumatların saxlanması üçün məlumat növləri
  • Xüsusi təyinatlı məlumat növləri:
  • 4. Verilənlər bazası ilə əsas əməliyyatlar
  • 5. Verilənlər bazasının bərpası (SqlServer2000 idarəsi)
  • 6. Sql Server sistemində indekslərin və açarların yaradılması və istifadəsi.
  • 7. Məhdudiyyətlərin istifadəsi
  • 8. Verilənlər bazası strukturunun layihələndirilməsi üçün diaqramlardan istifadə
  • 9. Baxışların yaradılması (baxışlar)
  • MövzuIv. Qaydalar və məna yaradılması
  • 1. Məlumatların bütövlüyünün monitorinqi alətləri
  • 2. Qaydalar və standart dəyərlər yaradın
  • MövzuV. Sql server sistemində tetikler
  • 1. Tətik anlayışı. Tətik növləri
  • 2. Tətiklərin yaradılması
  • 3. Tətiklərdən istifadə. Tətiklərin növləri
  • MövzuVi. Sorğunun optimallaşdırılması və sql əsasları
  • 1. Sorğunun optimallaşdırılması
  • 2. sql Server 2000-də əsas sql ifadələri
  • 3. Cədvəllərin seçmə ifadəsində birləşdirilməsi
  • Başlıqlardan
  • 4. Qrupdan istifadə və direktivlərə sahib olmaq
  • 5. Bəyanat daxil edin
  • 6. Operatoru yeniləyin
  • 7. Operatoru silin
  • 8. Yaradıla bilən operator
  • MövzuVii. Görünüşlər yaratmaq və onlarla işləmək
  • 1. Baxışları Anlamaq
  • 2. Nümayəndəliklərin yaradılması. Baxışlar göstərilir
  • 3. Baxışları redaktə etmək. Görünüş asılılıqlarını göstərin. Baxışların və Baxışların yaradılması
  • 4. Görünüş sütunlarının adının dəyişdirilməsi. Baxışların adının dəyişdirilməsi. Baxışlar silinir
  • 5. Baxışlar vasitəsilə məlumatların dəyişdirilməsi. SqlServerEnterpriseManager istifadə edərək məlumatların yenilənməsi
  • MövzuViii. Kursorların yaradılması və istifadəsi
  • 1. Kursor anlayışı
  • 2. Kursordan məlumatların alınması
  • 3. Kursorlarla işləmək üçün operatorlar və qlobal dəyişənlər
  • 4. Kursorlardan istifadə nümunələri
  • Mövzu IX. Saxlanılan Prosedurlardan istifadə
  • 1. Saxlanılan prosedurların üstünlükləri və çatışmazlıqları
  • 2. Saxlanılan prosedurun yaradılması
  • 3. Proqramın idarəetmə dilinin operatorları. operator elan edir
  • 4. Get, begin... end və if... else ifadələri
  • 5. Waitfor, return, while, break və continue ifadələri
  • 6. Çap və səhv bəyanatlar
  • 7. Saxlanılan prosedurlarda parametrlərdən istifadə
  • 8. Qlobal dəyişənlər. Saxlanılan Prosedurların Sazlanması
  • Mövzu X. Əməliyyatlar və kilidlər
  • 1. Əməliyyatın tərifi. Əməliyyat məhdudiyyətləri. Əməliyyat izolyasiya səviyyələri
  • 2. Bloklama haqqında əsas məlumatlar. Kilidlərin növləri
  • 3. Əməliyyatların yaradılması və onlarla işləmək. Xallara qənaət edin
  • 4.Bloklama haqqında məlumatı göstərin. Açıq şəkildə kilidin təyin edilməsi
  • Kilidlərin açıq şəkildə qurulması üçün parametrlərin təsviri
  • MövzuXi. Təhlükəsizlik sistemiSqlServer2000
  • 1. Təhlükəsizliyin növləri. İstifadəçi büdcələrinin yaradılması və idarə olunması
  • Standart server rolları
  • Standart verilənlər bazası rolları
  • 2. Yeni istifadəçilərin əlavə edilməsi. ID və İstifadəçilərin Silinməsi
  • 3. Rolların yaradılması. Rolların çıxarılması
  • 4. Giriş hüquqları. Giriş hüquqlarının idarə edilməsi
  • MövzuXii. Paylanmış idarəetmə obyektlərindən istifadə.
  • 1.Sql-dmo. Məqsəd, imkanlar
  • 2. Vsp əmrindən istifadə edərək məlumatları ixrac edin
  • 3. Saxlanılan prosedurlarda Sql-dmO obyektlərindən istifadə
  • MövzuXiii. Məlumat Anbarlarını Anlamaq
  • 1. Məlumatların saxlanması. Qərarlara Dəstək Sistemləri (DSS). İnteraktiv analitik emal (olap)
  • Verilənlər bazası və məlumat anbarının müqayisəsi
  • 2. Məlumat anbarının komponentləri. Məlumat anbarları və məlumat anbarları
  • 3. Məlumatın çevrilməsi. Metadata
  • 4. Məlumat anbarı planını hazırlayın
  • Microsoft Repository
  • MövzuXiv. Məlumatların Konversiya Xidmətlərindən istifadə
  • 1. Data Transformation Services (dts).DtS və verilənlər anbarı
  • 2. DtsDataPump aləti
  • 3. Magistrlər Dts
  • 4. DtsDesigner istifadə edərək
  • Mövzu XV. olap Microsoft sql Server xidmətləri
  • 1.OlaP və çoxölçülü verilənlər
  • 2. Bdolap-da məlumatların saxlanması
  • 3.Olap verilənlər bazasının optimallaşdırılması
  • 4. Çoxölçülü verilənlərə giriş
  • 6. Sql Server sistemində indekslərin və açarların yaradılması və istifadəsi.

    İndeks verilənlər bazasının ayrıca fiziki strukturudur, cədvəllər əsasında yaradılmış və verilənlərin axtarışını sürətləndirmək üçün nəzərdə tutulmuşdur, axtarışı indeksləşdirilmiş sütunun dəyəri ilə aparılır. SQL Server həmçinin cədvəlin sətir və sütunlarının unikal olmasını təmin etmək, məlumatı təşkil etmək və giriş sürətini yaxşılaşdırmaq üçün cədvəl məlumatlarını bir fayla və ya fayllar qrupuna yaymaq üçün indekslərdən istifadə edir.

    SQL Serverdə cədvəl məlumatları və indekslər aşağıdakı formatda səhifələr kimi saxlanılır:

    SQL Serverdə cədvəllər və indekslər üçün disk yaddaşı adlanan 8 səhifəlik bloklara bölünür. dərəcədə. Bir həddi dolduqdan sonra obyektə növbəti (digər 8 səhifə) ayrılır.

    SQL Server indeksləri təmsil etmək üçün ikili ağac diaqramından istifadə edir:

    Səviyyə 1

    Səviyyə 0

    Diaqramdakı düzbucaqlıların hər biri bir indeks səhifəsini təmsil edir. Səviyyələrin sayı artdıqca indeks emal performansı azalır. SQL Server iki növ indeksi dəstəkləyir: klasterli və qeyri-klasterli.

    Klaster indeksi sıfır səviyyəsinin (yarpaq səviyyəsi) cari cədvəl məlumatlarının səhifələrini ehtiva etdiyi və məlumatları verilmiş indeksin məntiqi ardıcıllığında fiziki olaraq saxladığı ikili ağacdır. Klaster indeksinin yaradılması verilənlər bazasında boş disk sahəsi tələb edir  mövcud cədvəl məlumatlarının miqdarından 1,2 dəfə çox. Cədvəldə yalnız bir klaster indeksi ola bilər.

    Qeyri-klasterli indekslər vəziyyətində, yarpaq səviyyəli səhifələr faktiki cədvəl məlumatlarını ehtiva etmir, lakin məlumat səhifəsinin nömrəsi və səhifədəki qeydin ardıcıl nömrəsi də daxil olmaqla bir sıra məlumatlara göstəricidir. Qeyri-klasterli indeks cədvəl məlumat sətirlərinin fiziki olaraq yenidən sıralanmasını tələb etmir və müvafiq olaraq verilənlər bazasında böyük boş disk sahəsi tələb etmir.

    Qeyri-klaster indeksləri həmişə klasterli indekslərdən bir səviyyə yüksəkdir, buna görə də kafel səviyyəsinə çatdıqdan sonra əlavə məlumat səhifəsinin oxunması tələb olunur. Cədvəldə çoxluq indeksi varsa, klaster edilməmiş indekslərin sıra göstəriciləri klasterli indeksin plitə səviyyəsinə işarə edəcək. Cədvəldə çoxluq indeksi yoxdursa, sıra indeksinə fayl ID-si, məlumat səhifəsinin nömrəsi və səhifədəki qeyd nömrəsi daxildir.

    Bir cədvəldə 249-a qədər qruplaşdırılmamış indeks yaradıla bilər. İndeks sətirinin uzunluğu 900 baytdan çox ola bilməz və 16 dəyər sütunundan çox olmamalıdır.

    İstənilən cədvəl üçün bir klasterli və 2 - 6 qruplaşdırılmamış indeksin olması kifayətdir (məlumat anbarlarının yaradılması istisna olmaqla).

    Aşağıdakı məlumat növləri olan sütunlarda indekslər yaradıla bilməz: BIT, TEXT, IMAGE. Baxışlar üzrə indekslər yaradıla bilməz.

    Xüsusi SQL Server verilənlər bazası cədvəlində indekslər yaratmaq üçün aşağıdakı üsullardan birini istifadə edə bilərsiniz:

    SQL CREATE INDEX əmrindən istifadə edərək indeks yaradın;

    SQL Server Enterprise Manager yardım proqramının imkanlarından yararlanın.

    İndekslərin yaradılmasının ikinci üsuluna baxaq. İndeksin yaradılmasının ilkin mərhələsi tələb olunan verilənlər bazasını və onun müəyyən ediləcəyi cədvəli seçməkdir.

    Əmrin icrası. Bütün tapşırıqlar/İdarə etİndekslər menyu Fəaliyyət verilənlər bazası indekslərini idarə et dialoq qutusunu göstərəcək. Bu dialoq qutusunda açılan siyahılara diqqət yetirin Verilənlər bazasıCədvəl, verilənlər bazası və onların cədvəlləri arasında hərəkət etməyə imkan verir. Üstəlik, siyahıda Mövcudindekslər Seçilmiş verilənlər bazası cədvəlləri üçün mövcud indekslər göstərilir.

    Bu informasiya qutusunun aşağı hissəsində aşağıdakı hərəkətləri yerinə yetirən idarəetmə düymələri var:

    Yeni- seçilmiş verilənlər bazası cədvəli üçün yeni indeksin yaradılması;

    Redaktə et- mövcud indeksin parametrlərinin redaktə edilməsi;

    Sil- əvvəlcədən seçilmiş indeksin silinməsi;

    Yaxın- dialoq qutusunun bağlanması;

    Kömək edin- bu məsələ ilə bağlı arayış məlumatının əldə edilməsi.

    Yeni indeks yaratmaq üçün düyməni istifadə edin Yeni bu dialoq qutusundan. Bu hərəkət başqa bir dialoq qutusu açacaq YaradınYeniIn­ dex, indeks parametrlərini təyin etmək üçün istifadə olunur. Sahədə indeksad Bu dialoq qutusunda siz yaradılacaq indeksin adını daxil etməli, sonra isə indeksdə iştirak edən sahələrin siyahısını müəyyən etməlisiniz. İndeksə müəyyən bir sahə əlavə etmək üçün onun adının solunda qeyd qutusunu seçin. Burada həmçinin aşağıdakı sahə məlumatlarına baxa bilərsiniz: Sütun- sahə adı, Datanövü- məlumat növü, Uzunluq- ölçü, Null edilə bilən- Null dəyərlərdən istifadə etmək bacarığı, Dəqiqlik- dəqiqlik və Ölçək- daxil edilmiş dəyərlərin sırası. Təqdim olunan siyahıda sahələrin sırasını dəyişə bilərsiniz.

    Seçim qrupu indeksseçimlər yaradılmış indeksin əlavə parametrlərini konfiqurasiya etməyə imkan verir:

    Unikaldəyərlər– müəyyən bir sahəyə yalnız unikal dəyərlər daxil etmək lazımdırsa, bu seçimi təyin etməlisiniz. Bu, hər dəfə yeni rekord əlavə edildikdə avtomatik unikallığı yoxlamağa imkan verəcək. Bu sahə üçün qeyddə artıq mövcud olan dəyəri daxil etməyə cəhd etsəniz, səhv mesajı göstərilir. Bu vəziyyətdə, bu sahədə NULL dəyərlərinin mövcudluğunun qadağan edilməsinə diqqət yetirməlisiniz. NULL dəyərlərindən istifadə edərkən və bu seçimi təyin edərkən xətalar baş verə bilər. Buna görə, unikal indeks yaratmağı planlaşdırdığınız sahəyə məcburi dəyərlər daxil etmək tövsiyə olunur;

    Kümelənmişindeks- SQL server sistemi verilənləri fiziki olaraq indeksləşdirmək imkanına malikdir. Başqa sözlə, indekslərdən istifadə etməklə cədvəldəki verilənlərin fiziki yeri ilə əlaqəli olan ayrıca struktur yaradılır. Bu seçimdən istifadə klaster indeksləşdirməni həyata keçirməyə imkan verir, nəticədə cədvəldəki məlumatlar bu indeksin sırasına uyğun olaraq çeşidlənəcək və bütün əlavə edilmiş məlumatlar fiziki qaydada dəyişikliyə səbəb olacaqdır. data. Nəzərə almaq lazımdır ki, cədvəldə yalnız bir klaster indeksi müəyyən edilə bilər;

    Məhəl qoymadublikatdəyərlər- bu seçimin seçilməsi indekslənmiş sahələrə dublikat dəyərlərin daxil edilməsinə məhəl qoymamaqla nəticələnir;

    Etyoxyenidən hesablayınstatistika- bu seçimin qoyulması cədvəl üzrə statistikanın avtomatik yenilənməsi funksiyasını müəyyən edir;

    Faylqrup- bu seçimdən istifadə edərək yaradılmış indeksin yerləşəcəyi fayl qrupunu seçə bilərsiniz;

    Dolduramil- Bu fürsətdən çox nadir hallarda istifadə olunur. Bu seçimdən istifadə edərək, indeksin səhifələnməsini konfiqurasiya edə bilərsiniz. Əgər verilənlər bazası cədvəlində məlumatı tez-tez dəyişməyi, silməyi və əlavə etməyi planlaşdırırsınızsa, o zaman əmsal DOLDURMA FAKTÖRÜ mümkün qədər aşağı təyin edilməlidir, məsələn, 20. Adətən yalnız oxumaq üçün daxil olan böyük cədvəllərdən istifadə edərkən əmsalın 100-ə təyin edilməsi tövsiyə olunur;

    Padindeks- opsion daxili indeks sahəsinin doldurulmasını müəyyən edir və opsionla birlikdə istifadə olunur Doldurfak­ tor;

    Damcımövcud- klasterli indeksdən istifadə edərkən, bu seçimin seçilməsi onun yenidən yaradılmasını müəyyən edir ki, bu da çoxluq indekslərinin arzuolunmaz yeniləmələrinin qarşısını alır.

    Düyməni istifadə edərək Redaktə etSQL Bu dialoq qutusu istifadəçiyə yaradılan SQL əmrini təqdim edir, onun köməyi ilə parametrlər ediləcək. Pəncərədə idarəetmə düymələri var Təhlilİcra etmək, onun köməyi ilə quraşdırılmış parametrlərin düzgünlüyünü təhlil edə bilərsiniz (Parse), həmçinin nəticədə SQL əmrini işə sala bilərsiniz (İcra et).

    Sonradan yaradılmış indekslər SQL ifadələrində istifadə oluna bilər SEÇİN aşağıdakı şəkildə:

    SEÇİN...

    FROM <имя таблицы> (İNDEKS= <имя_индекса>)

    Məlumatların bütövlüyünün monitorinqində istifadə olunan verilənlər bazası haqqında əsas anlayışlardan biri də budur açar. Əsas və xarici açarları ayırın. Əsas açar verilənlər bazası cədvəlindəki qeydləri unikal şəkildə müəyyən edən unikal sahədir (və ya bir neçə sahə). Xarici açarlar adətən digər cədvəllərin əsas açarlarına uyğun gələn cədvəl sahələridir.

    İndekslər və açarlar arasındakı əsas fərqlərə baxaq:

      SQL server cədvəl üçün yalnız bir əsas açarı təyin etməyə imkan verir, eyni zamanda bir neçə unikal indeks yaradıla bilər;

      Əsas açardan istifadə edərkən NULL dəyərləri daxil etmək qadağandır, unikal indekslərlə işləyərkən bu qadağa məcburi deyil, lakin ona riayət etmək məsləhətdir.

    SQL Server Enterprise Manager yardım proqramından istifadə edərək ilkin açarların yaradılması prosesinə baxaq. Bu problemin həllində ilk addım verilənlər bazası obyektlərinin siyahısından cədvəl seçməkdir. Bir əmrin icrası DizaynCədvəl menyu Fəaliyyət pəncərədə tələb olunan sahələri seçməli olan cədvəl dizaynerini yükləyəcək, sütundan onay qutusunu çıxarın İcazə verinNulls bu sahələr üçün. Əsas açarın qurulması düymədən istifadə etməklə həyata keçirilir Setilkinaçar.

    Bu əməliyyat düzgün yerinə yetirilibsə, sahə adının/sahələrinin solunda açar işarəsi görünməlidir. Əsas açarın çıxarılması onun quraşdırılması ilə eyni şəkildə həyata keçirilir.

    İndeksi yaratmaq üçün Transact-SQL əmrindən istifadə olunur.

    CREATE INDEX, ümumi sintaksisi:

    İNDEKSİ YARAT<имя индекса>ON<имя таблицы>(sütun adı[, sütun adı]…)

    [,] FILLFACTOR=x][[,]

    IGNORE_DUP_KEY][[,] DROP_EXISTING)[[,]

    STATISTICS_NORECOMPUTE]]

    Bu əmrin parametrlərinə baxaq:

    PAD_INDEX hər bir daxili səhifədə açıq qalan yerin miqdarıdır. Varsayılan olaraq, daxili səhifədəki elementlərin sayı ≥2-dir. Bu parametr FILLFACTOR ilə birlikdə istifadə olunur və bu parametrin faiz dəyərindən istifadə edir.

    IGNORE_DUP_KEY - hətta unikal açar sahəsinin dublikat dəyəri ilə sətirləri cədvəldə yerləşdirməyə çalışsanız belə işləməyə davam etməyə imkan verir - ekranda mesaj göstərilir və cərgəyə məhəl qoyulmur.

    DROP_EXISTING - bu parametrdən istifadə edərkən mövcud klasterli indeks atılır və yenidən yaradılır, mövcud qeyri-klaster indeksləri yalnız yeni klasterli indeks yaradıldıqdan sonra yenidən qurulur.

    STATISTICS_NORECOMPUTE - indekslər üzrə statistik məlumatların avtomatik yenilənməsini bloklayır.

    İndekslər üzərində başqa əməliyyatlara baxaq.

    1) İndekslərə baxın:

    a) SQL Server Enterprise Manager pəncərəsində verilənlər bazasını seçin (qovluqdakı işarə). Verilənlər bazaları);

    b) nişana keçin Cədvəlindekslər– burada bütün cədvəllərin adları və seçilmiş verilənlər bazası üçün əlaqəli indekslərin adları göstərilir.

    2) İndekslərin adının dəyişdirilməsi, silinməsi.

    İndeksi silmək üçün Transact-SQL əmrindən istifadə edin:

    DAMCIİNDEKS[sahibi.]<имя_ таблицы>. <имя_индекса>[,[sahibi.]<имя_таблицы>, <имя_индекса>]

    İndeksin adının dəyişdirilməsi əmrlə həyata keçirilir:

    sp_ adını dəyişin <имя_объекта>, <новое имя> [,SÜTUN| İNDEKS]

    Siz həmçinin SQL Server Enterprise Manager pəncərəsindən istifadə edə bilərsiniz: cədvəli dizaynerdə açın, cədvəl üçün kontekst menyusundan seçin. Xüsusiyyətlər, dialoq qutusunda CədvəlXüsusiyyətlər nişanı seçin İndekslər/ Açar- burada indeksin adını dəyişdirə və yeni indeks yarada bilərsiniz.

    İndeksdən istifadə strategiyası:

    1) İndekslənməlidir:

      cədvəllərə qoşulmaq üçün istifadə olunan sütunlar;

      sorğuları yerinə yetirərkən təhlil edilən məlumatların diapazonunu məhdudlaşdırmaq üçün istifadə edilən sütunlar;

      direktivlərdə istifadə olunan sütunlar ORDERBY

    QRUPBY;

      cəmləmə və ümumiləşdirmə üçün istifadə olunan sütunlar.

    2) İndekslənməməlidir:

      az sayda sıra olan cədvəllər;

      geniş dəyər diapazonuna malik sütunlar;

      dəyərləri çox uzun olan sütunlar (>25 bayt);

      sorğular qurarkən sütunlar istifadə edilmir.

    3) Sütunlar üçün klasterli indekslərdən istifadə etmək məsləhətdir:

      sütunlar çoxlu sorğularda istifadə olunursa;

      sütunlar ORDER BY və ya istifadə olunursa

      sütunlar cədvəlləri birləşdirmək üçün istifadə olunursa.

    Avtomatik indeks növü seçimi funksiyasından istifadə:

      Sorğu Analizatorunu açın;

      DB siyahısında verilənlər bazası adını seçin;

      SQL əmrinin mətnini daxil edin;

      Komanda seçin Sorğu/İndeks Təhlilini yerinə yetirin.

    SQL Server sorğunun sürətləndirilməsinə kömək edəcək indeksin yaradılıb-yaradılmadığını müəyyən etmək üçün sorğunu təhlil edəcək. İndeks tapılarsa, bir pəncərə görünəcək SorğuAnalizator. Təklif olunan indeks yaratmaq üçün düyməni sıxın Qəbul edin.

    6. İndekslər və performansın optimallaşdırılması

    Verilənlər bazasında indekslər: məqsəd, performansa təsiri, indekslərin yaradılması prinsipləri

    6.1 İndekslər nə üçündür?

    İndekslər verilənlər bazalarında cədvəldə müəyyən sahə və ya sahələr toplusu üzrə axtarışı və çeşidləməni sürətləndirməyə imkan verən xüsusi strukturlardır və həmçinin məlumatların unikallığını təmin etmək üçün istifadə olunur. İndeksləri müqayisə etməyin ən asan yolu kitablardakı indekslərlədir. İndeks yoxdursa, düzgün yeri tapmaq üçün bütün kitabı nəzərdən keçirməli olacağıq, lakin indekslə eyni hərəkəti daha sürətli etmək olar.

    Tipik olaraq, indekslər nə qədər çox olarsa, verilənlər bazası sorğularının performansı bir o qədər yaxşı olar. Bununla belə, indekslərin sayı həddindən artıq artarsa, məlumatların dəyişdirilməsi əməliyyatlarının (daxil et/dəyişdir/sil) performansı azalır və verilənlər bazasının ölçüsü artır, ona görə də indekslərin əlavə edilməsinə ehtiyatla yanaşmaq lazımdır.

    İndekslərin yaradılması ilə bağlı bəzi ümumi prinsiplər:

    · Axtarış və çeşidləmə əməliyyatları üçün tez-tez istifadə olunan birləşmələrdə istifadə olunan sütunlar üçün indekslər yaradılmalıdır. Nəzərə alın ki, indekslər həmişə əsas açar məhdudiyyətinə məruz qalan sütunlar üçün avtomatik olaraq yaradılır. Çox vaxt onlar xarici açarı olan sütunlar üçün yaradılır (Access-də - avtomatik);

    · unikallıq məhdudiyyətinə məruz qalan sütunlar üçün avtomatik olaraq indeks yaradılmalıdır;

    · Ən az təkrarlanan dəyərlərin olduğu və verilənlərin bərabər paylandığı sahələr üçün indekslər yaratmaq yaxşıdır. Oracle çoxlu sayda dublikat dəyərlərə malik sütunlar üçün xüsusi bit indekslərinə malikdir və Access bu tip indeksi təmin etmir;

    · əgər axtarış daimi olaraq müəyyən sütunlar toplusunda (eyni vaxtda) aparılırsa, bu halda birləşmiş indeks (yalnız SQL Serverdə) yaratmaq məntiqli ola bilər - sütunlar qrupu üçün bir indeks;

    · Cədvəllərə dəyişikliklər edildikdə, bu cədvəlin üzərinə qoyulan indekslər avtomatik olaraq dəyişdirilir. Nəticədə, indeks yüksək dərəcədə parçalana bilər və bu, performansa təsir göstərir. Siz vaxtaşırı indeksin parçalanma dərəcəsini yoxlamalı və onları defraqmentasiya etməlisiniz. Böyük miqdarda məlumat yükləyərkən, bəzən ilk növbədə bütün indeksləri silmək və əməliyyat başa çatdıqdan sonra onları yenidən yaratmaq məna kəsb edir;

    · indekslər təkcə cədvəllər üçün deyil, həm də görünüşlər üçün yaradıla bilər (yalnız SQL Serverdə). Üstünlüklər - sorğu zamanı deyil, cədvəllərdə yeni dəyərlər göründüyü anda sahələri hesablamaq imkanı.

    1) İndeks anlayışı
    indeks bir və ya bir neçə sütunun dəyərlərinə əsaslanan cədvəl sətirlərinə sürətli çıxışı təmin edən bir vasitədir.

    Bu operatorda çoxlu müxtəliflik var, çünki o, standartlaşdırılmayıb, çünki standartlar performans məsələlərini həll etmir.

    2) İndekslərin yaradılması
    İNDEKSİ YARATIN
    ON()

    3) İndekslərin dəyişdirilməsi və silinməsi
    İndeksin fəaliyyətinə nəzarət etmək üçün operatordan istifadə olunur:
    DEĞİŞTİRİN
    İndeksi silmək üçün operatordan istifadə edin:
    DROP INDEX

    a) Cədvəl seçmək qaydaları
    1. Sətirlərin 5%-dən çoxunun seçilmədiyi cədvəllərin indeksləşdirilməsi məqsədəuyğundur.
    2. SELECT ifadəsinin WHERE bəndində dublikatları olmayan cədvəllər indeksləşdirilməlidir.
    3. Tez-tez yenilənən cədvəlləri indeksləşdirmək praktiki deyil.
    4. 2 səhifədən çox olmayan cədvəlləri indeksləşdirmək (Oracle üçün bu 300 sətirdən azdır) uyğun deyil, çünki onun tam skan edilməsi çox vaxt çəkmir.

    b) Sütun seçimi qaydaları
    1. Əsas və xarici açarlar - tez-tez cədvəllərə qoşulmaq, verilənləri əldə etmək və axtarış etmək üçün istifadə olunur. Bunlar həmişə maksimum faydası olan unikal indekslərdir
    2. Referensial bütövlüyü seçimlərindən istifadə edərkən, sizə həmişə FK-da indeks lazımdır.
    3. Məlumatların tez-tez çeşidləndiyi və/yaxud qruplaşdırıldığı sütunlar.
    4. SELECT ifadəsinin WHERE bəndində tez-tez axtarılan sütunlar.
    5. Uzun təsviri sütunlarda indekslər yaratmamalısınız.

    c) Kompozit indekslərin yaradılması prinsipləri
    1. Fərdi sütunların bir neçə unikal dəyəri varsa, kompozit indekslər yaxşıdır, lakin kompozit indeks daha çox unikallıq təmin edir.
    2. SELECT ifadəsi ilə seçilmiş bütün dəyərlər kompozit indeksə aiddirsə, o zaman dəyərlər indeksdən seçilir.
    3. WHERE bəndi AND operatoru ilə birləşdirilmiş iki və ya daha çox dəyərdən istifadə edirsə, mürəkkəb indeks yaradılmalıdır.

    d) Yaratmaq tövsiyə edilmir
    Sütunlarda, o cümlədən kompozit sütunlarda indekslər yaratmaq tövsiyə edilmir:
    1. Sorğu nəticələrini axtarmaq, birləşdirmək və çeşidləmək üçün nadir hallarda istifadə olunur.
    2. Tez-tez dəyişən dəyərləri ehtiva edir ki, bu da indeksin tez-tez yenilənməsini tələb edir, bu da verilənlər bazasının işini ləngidir.
    3. Az sayda unikal dəyərləri (10% m/f-dən az) və ya bir və ya iki dəyəri olan üstünlük təşkil edən sıraların sayını (təchizatçının yaşayış şəhəri Moskvadır) ehtiva edir.
    4. Funksiyalar və ya ifadələr onlara WHERE bəndində tətbiq edilir və indeks işləmir.

    e) Unutmamalıyıq
    İndekslərin sayını azaltmağa çalışmalısınız, çünki onların çoxu məlumatların yenilənmə sürətini azaldır. Beləliklə, MS SQL Server hər cədvəldə 16-dan çox olmayan indeks yaratmağı tövsiyə edir.
    Tipik olaraq, indekslər sorğu məqsədləri və istinad bütövlüyünü qorumaq üçün yaradılır.
    Əgər indeks sorğular üçün istifadə edilmirsə, o zaman silinməli və tetikleyicilərdən istifadə edərək istinad bütövlüyü təmin edilməlidir.

    Bu məqalədə indekslər və sorğunun icra vaxtının optimallaşdırılmasında onların rolu müzakirə olunur. Məqalənin birinci hissəsində indekslərin müxtəlif formaları və onların necə saxlanılması müzakirə olunur. Sonra, indekslərlə işləmək üçün istifadə edilən üç əsas Transact-SQL ifadəsini araşdırırıq: CREATE INDEX, ALTER INDEX və DROP INDEX. Sonra onun sistem performansına təsir indekslərinin parçalanması nəzərdən keçirilir. Daha sonra o, indekslərin yaradılması üçün bəzi ümumi qaydalar təqdim edir və bir neçə xüsusi indeks növlərini təsvir edir.

    Ümumi məlumat

    Verilənlər bazası sistemləri adətən əlaqəli məlumatlara sürətli çıxışı təmin etmək üçün indekslərdən istifadə edir. İndeks bir və ya bir neçə sıra verilənlərə sürətli çıxış imkanı verən ayrıca fiziki məlumat strukturudur. Beləliklə, indekslərin düzgün tənzimlənməsi sorğu performansının yaxşılaşdırılmasının əsas aspektidir.

    Verilənlər bazası indeksi bir çox cəhətdən kitabın indeksinə (əlifba sırası indeksinə) bənzəyir. Kitabda tez bir zamanda mövzu tapmaq lazım olanda, əvvəlcə kitabın hansı səhifələrində bu mövzunun müzakirə olunduğu indeksinə baxırıq, sonra isə dərhal istədiyimiz səhifəni açırıq. Eynilə, cədvəldə müəyyən bir sıra axtararkən, Verilənlər Bazasının Mühərriki onun fiziki yerini tapmaq üçün indeksə daxil olur.

    Lakin kitab indeksi ilə verilənlər bazası indeksi arasında iki əhəmiyyətli fərq var:

      Kitabın oxucusunun hər bir konkret halda indeksdən istifadə edib-etməməsinə özü qərar vermək imkanı var. Verilənlər bazası istifadəçisinin bu imkanı yoxdur və bu qərar onun üçün adlı sistem komponenti tərəfindən qəbul edilir sorğu optimallaşdırıcısı. (İstifadəçi indeks göstərişləri vasitəsilə indekslərin istifadəsini manipulyasiya edə bilər, lakin bu göstərişlər yalnız məhdud sayda xüsusi hallarda istifadə üçün tövsiyə olunur.)

      Müəyyən bir iş kitabının indeksi iş kitabı ilə birlikdə yaradılır, bundan sonra artıq dəyişdirilmir. Bu o deməkdir ki, müəyyən bir mövzu üçün indeks həmişə eyni səhifə nömrəsini göstərəcəkdir. Bunun əksinə olaraq verilənlər bazası indeksi müvafiq verilənlər dəyişdikdə dəyişə bilər.

    Cədvəldə uyğun indeks yoxdursa, sistem cərgələri əldə etmək üçün cədvəlin skan üsulundan istifadə edir. İfadə masa skanı o deməkdir ki, sistem ardıcıl olaraq cədvəlin hər bir sətirini (birincidən axırıncıya qədər) götürüb yoxlayır və WHERE bəndindəki axtarış şərti onun üçün təmin edilirsə, sıranı nəticə dəstinə yerləşdirir. Beləliklə, bütün sətirlər yaddaşda fiziki yerləşdiyi yerə görə götürülür. Bu üsul, aşağıda izah edildiyi kimi, indekslərdən istifadə etməkdən daha az səmərəlidir.

    İndekslər adlanan əlavə verilənlər bazası strukturlarında saxlanılır indeks səhifələri. Hər indekslənmiş cərgə üçün var indeks girişi, indeks səhifəsində saxlanılır. Hər bir indeks elementi indeks açarı və indeksdən ibarətdir. Buna görə indeks elementi işarə etdiyi cədvəl cərgəsindən xeyli qısadır. Bu səbəbdən, hər bir indeks səhifəsində indeks elementlərinin sayı məlumat səhifəsindəki sətirlərin sayından xeyli çoxdur.

    İndekslərin bu xassəsi çox vacibdir, çünki indeks səhifələrini keçmək üçün tələb olunan I/O əməliyyatlarının sayı müvafiq məlumat səhifələrini keçmək üçün tələb olunan I/O əməliyyatlarının sayından əhəmiyyətli dərəcədə azdır. Başqa sözlə, cədvəlin skan edilməsi, ehtimal ki, cədvəlin indeksini skan etməkdən daha çox I/O əməliyyatları tələb edəcəkdir.

    Database Engine indeksləri B+ ağac məlumat strukturundan istifadə etməklə yaradılır. B+ ağacının bütün ən aşağı qovşaqlarının ağacın yuxarı hissəsindən (kök qovşağından) eyni sayda məsafədə olduğu bir ağac quruluşu var. Bu xüsusiyyət hətta indekslənmiş sütuna verilənlər əlavə edildikdə və ya silindikdə belə saxlanılır.

    Aşağıdakı şəkildə İşçi cədvəli üçün B+ ağac strukturu və Id sütunu üçün 25348 dəyəri ilə həmin cədvəldəki sıraya birbaşa çıxış göstərilir. (Biz güman edirik ki, İşçi cədvəli Id sütunu ilə indeksləşdirilib.) Siz həmçinin bu şəkildə görə bilərsiniz ki, B+ ağacı kök düyün, ağac qovşaqları və sıfır və ya daha çox aralıq qovşaqlardan ibarətdir:

    Bu ağacda 25348 dəyərini aşağıdakı kimi axtara bilərsiniz. Ağacın kökündən başlayaraq o, istədiyiniz dəyərdən böyük və ya ona bərabər olan ən kiçik açar dəyərini axtarır. Beləliklə, kök qovşağında bu dəyər 29346 olacaq, buna görə də bu dəyərlə əlaqəli aralıq düyünə keçid edilir. Bu qovşaqda 28559 dəyəri göstərilən tələblərə cavab verir, bunun nəticəsində bu dəyərlə əlaqəli ağac qovşağına keçid edilir. Bu qovşaq 25348 arzu olunan dəyəri ehtiva edir. Tələb olunan indeksi təyin etdikdən sonra müvafiq göstəricilərdən istifadə edərək onun cərgəsini verilənlər cədvəlindən çıxara bilərik. (Alternativ ekvivalent yanaşma indeksdən az və ya ona bərabər olan dəyəri axtarmaq olardı.)

    İndeksli axtarış, aşkar üstünlüklərinə görə çoxlu sayda cərgələri olan cədvəlləri axtarmaq üçün adətən üstünlük verilən üsuldur. İndeksləşdirilmiş axtarışdan istifadə edərək, biz yalnız bir neçə I/O əməliyyatından istifadə etməklə, cədvəldə istənilən sətiri çox qısa müddətdə tapa bilərik. Ardıcıl axtarış (yəni, cədvəlin birinci cərgədən sonuncuya skan edilməsi) daha çox vaxt tələb edir, tələb olunan sıra nə qədər uzaq olarsa.

    Növbəti bölmələrdə biz klasterli və qeyri-klasterli indekslərin iki mövcud növünə baxacağıq və indekslərin necə yaradılacağını öyrənəcəyik.

    Kümelənmiş İndekslər

    Kümelənmiş İndeks cədvəldəki məlumatların fiziki sırasını müəyyən edir. Verilənlər Bazası Mühərriki cədvəl üçün yalnız bir klasterli indeks yaratmağa imkan verir, çünki Cədvəlin sətirləri fiziki olaraq birdən çox şəkildə sıralana bilməz. Kümelənmiş indeksdən istifadə edərək axtarış B+ ağacının kök qovşağından ağacdakı ikiqat əlaqəli siyahıda bir-birinə bağlı olan qovşaqlara doğru aparılır. səhifə zənciri.

    Kümelənmiş indeksin mühüm xüsusiyyəti onun ağac qovşaqlarının məlumat səhifələrini ehtiva etməsidir. (Klasterləşdirilmiş indeks qovşaqlarının bütün digər səviyyələri indeks səhifələrini ehtiva edir.) Klaster indeksi müəyyən edilmiş (açıq və ya gizli) cədvəl çoxlu cədvəl adlanır. Kümelənmiş indeksin B+ ağac strukturu aşağıdakı şəkildə göstərilmişdir:

    Klaster indeksi ilkin açar məhdudiyyəti ilə müəyyən edilmiş əsas açarı olan hər bir cədvəldə standart olaraq yaradılır. Bundan əlavə, hər bir klaster indeksi standart olaraq unikaldır, yəni. Kümelenmiş indeksi müəyyən edilmiş sütunda hər bir məlumat dəyəri yalnız bir dəfə görünə bilər. Əgər klaster indeksi dublikat dəyərləri ehtiva edən sütunda yaradılıbsa, verilənlər bazası sistemi dublikat dəyərləri ehtiva edən sətirlərə dörd baytlıq identifikator əlavə etməklə birmənalılığı təmin edir.

    Klasterləşdirilmiş indekslər sorğu bir sıra dəyərləri axtardıqda çox sürətli məlumat əldə etməyi təmin edir.

    Qeyri-klaster indeksləri

    Qruplaşdırılmamış indeksin strukturu klasterli indekslə tamamilə eynidir, lakin iki mühüm fərqlə:

      qruplaşdırılmamış indeks cədvəlin sətirlərinin fiziki sırasını dəyişmir;

      Qeyri-klasterli indeks qovşağı səhifələri indeks açarları və əlfəcinlərdən ibarətdir.

    Cədvəldə bir və ya bir neçə qruplaşdırılmamış indeks təyin etsəniz, cədvəlin sətirlərinin fiziki sırası dəyişdirilməyəcək. Hər bir qruplaşdırılmamış indeks üçün Database Engine indeks səhifələrində saxlanılan əlavə indeks strukturu yaradır. Qeyri-klaster indeksinin B+ ağac strukturu aşağıdakı şəkildə göstərilmişdir:

    Qruplaşdırılmamış indeksdəki əlfəcin indeks açarına uyğun olan cərgənin harada yerləşdiyini göstərir. İndeks açarı əlfəcin komponenti cədvəlin qruplaşdırılmış cədvəl və ya yığın olmasından asılı olaraq iki növ ola bilər. (SQL Server terminologiyasında yığın klaster indeksi olmayan cədvəldir.) Əgər klasterli indeks mövcuddursa, qruplaşdırılmamış indeks nişanı cədvəlin klaster indeksinin B+ ağacını göstərir. Cədvəldə çoxluq indeksi yoxdursa, əlfəcin eynidir sıra identifikatoru (RID - Sıra İdentifikatoru), üç hissədən ibarətdir: cədvəlin saxlandığı faylın ünvanı, cərgənin saxlandığı fiziki blokun (səhifənin) ünvanı və səhifədəki cərgənin ofseti.

    Daha əvvəl qeyd edildiyi kimi, qruplaşdırılmamış indeksdən istifadə edərək məlumatların axtarışı cədvəlin növündən asılı olaraq iki fərqli şəkildə edilə bilər:

      yığın - qruplaşdırılmamış indeksin axtarış strukturunu keçin, bundan sonra sıra identifikatorundan istifadə edərək cərgə götürülür;

      klasterli cədvəl - qruplaşdırılmamış indeks strukturunun axtarışı, sonra müvafiq klasterli indeksin keçidi.

    Hər iki halda, I/O əməliyyatlarının həcmi kifayət qədər böyükdür, ona görə də siz ehtiyatla qruplaşdırılmamış indeks tərtib etməlisiniz və ondan yalnız onun istifadəsinin performansı əhəmiyyətli dərəcədə yaxşılaşdıracağına əmin olduğunuz halda istifadə etməlisiniz.

    Transact-SQL dili və indeksləri

    İndi indekslərin fiziki strukturu ilə tanış olduğumuz üçün bu bölmədə indeksləri necə yaratmaq, dəyişdirmək və silmək, həmçinin indeks parçalanması məlumatını əldə etmək və indeks məlumatını redaktə etmək yollarına baxacağıq. Bütün bunlar bizi sistemin işini yaxşılaşdırmaq üçün indekslərdən istifadənin sonrakı müzakirəsinə hazırlayacaq.

    İndekslərin yaradılması

    İfadədən istifadə edərək cədvəldə indeks yaradılır İNDEKSİ YARATIN. Bu təlimat aşağıdakı sintaksisə malikdir:

    CREATE INDEX index_name ON table_name (sütun1 ,...) [ DAXİL ET (sütun_adı [ ,... ]) ] [[, ] PAD_INDEX = (ON | OFF)] [[, ] DROP_EXISTING = (ON | OFF)] [[ , ] SORT_IN_TEMPDB = (ON | OFF)] [[, ] IGNORE_DUP_KEY = (ON | OFF)] [[, ] ALLOW_ROW_LOCKS = (ON | OFF)] [[, ] ALLOW_PAGE_LOCKS = (ON | OFF)] [[, ] STATISTICS_NORECOMPUTE = (ON | OFF)] [[, ] ONLINE = (ON | OFF)]] Sintaksis konvensiyaları

    index_name parametri yaradılacaq indeksin adını təyin edir. İndeks table_name parametri ilə müəyyən edilmiş bir cədvəlin bir və ya bir neçə sütununda yaradıla bilər. İndeksin yaradıldığı sütun sütun1 parametri ilə müəyyən edilir. Bu parametrin rəqəm şəkilçisi indeksin cədvəlin bir neçə sütununda yaradıla biləcəyini göstərir. Verilənlər Bazası Mühərriki baxışlar üzrə indekslər yaratmağı da dəstəkləyir.

    İstənilən cədvəl sütununu indeksləşdirə bilərsiniz. Bu o deməkdir ki, VARBINARY(max), BIGINT və SQL_VARIANT məlumat növü dəyərlərindən ibarət sütunlar da indeksləşdirilə bilər.

    İndeks sadə və ya mürəkkəb ola bilər. Sadə indeks bir sütunda, mürəkkəb indeks isə bir neçə sütunda yaradılır. Mürəkkəb indeks onun ölçüsü və sütunların sayı ilə bağlı müəyyən məhdudiyyətlərə malikdir. Bir indeksin maksimum 900 bayt və maksimum 16 sütunu ola bilər.

    UNİKAL parametr indeksləşdirilmiş sütunun yalnız tək qiymətli (yəni təkrarlanmayan) dəyərləri ehtiva edə biləcəyini müəyyən edir. Tək qiymətli kompozit indeksdə unikal hər bir sətrin bütün sütunlarının dəyərlərinin birləşməsindən ibarət olmalıdır. UNİKAL açar sözü göstərilməyibsə, indekslənmiş sütun(lar)da dublikat dəyərlərə icazə verilir.

    CLUSTERED parametr qruplaşdırılmış indeksi müəyyən edir və NONCLUSTERED parametr(default) indeksin cədvəldəki sətirlərin sırasını dəyişmədiyini müəyyən edir. Verilənlər Bazası Mühərriki cədvəldə maksimum 249 qruplaşdırılmamış indeksə icazə verir.

    Verilənlər Bazasının Mühərriki sütun dəyərlərinin azalan sırası ilə indeksləri dəstəkləmək üçün təkmilləşdirilmişdir. Sütun adından sonra ASC parametri indeksin sütun dəyərlərinin artan sırası ilə yaradıldığını, DESC parametri isə indeks sütun dəyərlərinin azalan sırasını təyin edir. Bu, indeksin istifadəsində daha çox çeviklik təmin edir. Azalan sıra ilə dəyərləri əks istiqamətdə sıralanan sütunlarda kompozit indekslər yaratmalısınız.

    DAXİL parametri Qruplaşdırılmamış indeksin qovşaq səhifələrinə əlavə edilən açarsız sütunları təyin etməyə imkan verir. INCLUDE siyahısındakı sütun adları təkrarlanmamalıdır və sütun həm açar, həm də əsas olmayan sütun kimi istifadə edilə bilməz.

    INCLUDE parametrinin faydalılığını həqiqətən başa düşmək üçün onun nə olduğunu başa düşməlisiniz əhatə indeksi. Bütün sorğu sütunları indeksə daxil edilərsə, əhəmiyyətli performans təkmilləşdirmələri əldə edə bilərsiniz, çünki Sorğu optimallaşdırıcısı cədvəldəki məlumatlara daxil olmadan indeks səhifələri arasında bütün sütun dəyərlərini tapa bilər. Bu qabiliyyət əhatə indeksi və ya əhatə sorğusu adlanır. Buna görə də, əlavə əsas olmayan sütunların klaster edilməmiş indeks qovşağı səhifələrinə daxil edilməsi sizə daha çox əhatə sorğusu əldə etməyə və onların performansını əhəmiyyətli dərəcədə yaxşılaşdırmağa imkan verəcək.

    FILLFACTOR parametri indeksin yaradılması zamanı doldurulacaq hər bir indeks səhifəsinin faizini müəyyən edir. FILLFACTOR parametrinin dəyəri 1-dən 100-ə qədər diapazonda təyin oluna bilər. n=100 dəyəri ilə hər bir indeks səhifəsi 100%-ə qədər doldurulur, yəni. mövcud qovşaq səhifəsi, eləcə də qovşağı olmayan səhifədə yeni sətirlər daxil etmək üçün boş yer olmayacaq. Buna görə də, bu dəyəri yalnız statik cədvəllər üçün istifadə etmək tövsiyə olunur. (Defolt dəyər, n=0, indeks qovşağının səhifələrinin dolu olduğunu və ara səhifələrin hər birində bir giriş üçün boş yer olduğunu bildirir.)

    FILLFACTOR parametri 1 ilə 99 arasındakı dəyərlərə təyin edilərsə, yaradılan indeks strukturunun qovşaq səhifələrində boş yer olacaq. n dəyəri nə qədər böyükdürsə, indeks qovşağının səhifələrində bir o qədər az boş yer var. Məsələn, n=60 ilə hər bir indeks qovşağının səhifəsi gələcək indeks sıra əlavələri üçün 40% boş yerə malik olacaq. (İndeks sətirləri INSERT və ya UPDATE ifadəsindən istifadə etməklə daxil edilir.) Beləliklə, verilənləri tez-tez dəyişən cədvəllər üçün n=60 dəyəri məqbul olardı. 1 ilə 99 arasında olan FILLFACTOR dəyərləri ilə aralıq indeks səhifələrində hər bir giriş üçün boş yer var.

    İndeks yaradıldıqdan sonra FILLFACTOR dəyəri istifadə zamanı dəstəklənmir. Başqa sözlə, o, yalnız boş yer üçün faiz təyin edərkən mövcud məlumatlarla ayrılmış yerin miqdarını göstərir. FILLFACTOR parametrini orijinal dəyərinə qaytarmaq üçün ALTER INDEX ifadəsindən istifadə edin.

    Parametr PAD_INDEX FILLFACTOR parametri ilə sıx bağlıdır. FILLFACTOR parametri, əsasən, indeks qovşaqlarının ümumi səhifə ölçüsünün faizi kimi boş yerin miqdarını müəyyən edir. Və PAD_INDEX parametri FILLFACTOR parametrinin dəyərinin həm indeks səhifələrinə, həm də indeksdəki məlumat səhifələrinə aid olduğunu müəyyən edir.

    DROP_EXISTING parametri Qruplaşdırılmamış indeksi olan cədvəldə çoxluq indeksini təkrarlayarkən performansı yaxşılaşdırmağa imkan verir. Ətraflı məlumat üçün aşağıdakı "İndeksin yenidən qurulması" bölməsinə baxın.

    SORT_IN_TEMPDB parametri tempdb sistem verilənlər bazasına indeks yaratarkən istifadə olunan aralıq çeşidləmə əməliyyatlarından verilənləri yerləşdirmək üçün istifadə olunur. Tempdb verilənlərdən fərqli diskdə yerləşirsə, bu, performansı yaxşılaşdıra bilər.

    IGNORE_DUP_KEY parametri Sistemə indekslənmiş sütunlara dublikat dəyərlər daxil etmək cəhdinə məhəl qoymamağa imkan verir. Bu seçim yalnız INSERT ifadəsi indekslənmiş sütuna dublikat məlumatları daxil etdikdə uzun müddət davam edən əməliyyatın dayandırılmasının qarşısını almaq üçün istifadə edilməlidir. Bu seçim aktiv olduqda, INSERT ifadəsi indeksin unikallığını pozan sətirləri cədvələ daxil etməyə cəhd etdikdə, verilənlər bazası sistemi bütün bəyanatı pozmaq əvəzinə sadəcə xəbərdarlıq verir. Bu halda Database Engine dublikat açar dəyərləri olan sətirləri daxil etmir, sadəcə olaraq onlara məhəl qoymur və düzgün sətirləri əlavə edir. Bu parametr təyin edilmədikdə, bütün təlimatın icrası anormal şəkildə dayandırılacaqdır.

    Nə vaxt parametr ALLOW_ROW_LOCKS aktivləşdirilib (akılı vəziyyətdə), sistem sıra kilidini tətbiq edir. Eynilə, aktivləşdirildikdə parametr ALLOW_PAGE_LOCKS, sistem paralel giriş zamanı səhifə kilidini tətbiq edir. STATISTICS_NORECOMPUTE parametri göstərilən göstərici üzrə statistik məlumatların avtomatik yenidən hesablanması vəziyyətini müəyyən edir.

    Aktivləşdirilib ONLINE parametr onlayn olaraq indeks yaratmağa, yenidən yaratmağa və silməyə imkan verir. Bu seçim indeksi dəyişdirərkən eyni vaxtda əsas cədvəlin və ya çoxluq indeksinin məlumatlarını və hər hansı əlaqəli indeksləri dəyişdirməyə imkan verir. Məsələn, siz klasterli indeksi yenidən qurarkən, onun məlumatlarını yeniləməyə və həmin məlumatlar üzrə sorğuları icra etməyə davam edə bilərsiniz.

    Parametr ON ya standart fayl qrupunda (defolt dəyər) və ya müəyyən edilmiş fayl qrupunda (fayl_qrupunun dəyəri) müəyyən edilmiş indeks yaradır.

    Aşağıdakı nümunə İşçi cədvəlinin İd sütununda qruplaşdırılmamış indeksin necə yaradılacağını göstərir:

    Nümunə Db-dən istifadə edin; CREATE INDEX ix_empid ON Employee(Id);

    Tək qiymətli kompozit indeksin yaradılması aşağıdakı nümunədə göstərilmişdir:

    Nümunə Db-dən istifadə edin; FILLFACTOR İLƏ IX_empid_prnu İşlərdə (EmpId, LayihəNömrəsi) UNİKAL İNDEKSİ YARADIN = 80;

    Bu nümunədə hər bir sütundakı dəyərlər tək rəqəmli olmalıdır. İndeks yaradıldıqda, indeks qovşağının hər səhifəsindəki boşluğun 80%-i doldurulur.

    Sütunda dublikat dəyərlər varsa, sütunda unikal indeks yarada bilməzsiniz. Belə bir indeks yalnız o halda yaradıla bilər ki, hər bir dəyər (NULL dəyərlər daxil olmaqla) sütunda tam olaraq bir dəfə görünsün. Əlavə olaraq, mövcud unikal indeksə daxil edilmiş sütuna mövcud məlumat dəyərini daxil etmək və ya dəyişdirmək cəhdi, dəyər təkrarlandıqda sistem tərəfindən rədd ediləcək.

    İndeksin parçalanması haqqında məlumat əldə etmək

    İndeksin istifadə müddəti ərzində o, parçalana bilər və məlumatların indeks səhifələrində saxlanması prosesini səmərəsiz edir. İndeksin parçalanmasının iki növü var: daxili parçalanma və xarici parçalanma. Daxili parçalanma hər bir səhifədə saxlanılan məlumatların miqdarını müəyyən edir, xarici parçalanma isə səhifələr məntiqi qaydada olmayanda baş verir.

    Daxili indeks parçalanması haqqında məlumat əldə etmək üçün DMV dinamik idarəetmə görünüşü çağırılır sys.dm_db_index_physical_stats. Bu DMV göstərilən səhifənin məlumatlarının və indekslərinin həcmi və parçalanması haqqında məlumatları qaytarır. Hər səhifə üçün B+ ağacının hər səviyyəsi üçün bir sıra qaytarılır. Bu DMV-dən istifadə edərək, məlumat səhifələrində sətir parçalanma dərəcəsi haqqında məlumat əldə edə bilərsiniz, bunun əsasında verilənləri yenidən təşkil edib-etməmək barədə qərar verə bilərsiniz.

    sys.dm_db_index_physical_stats görünüşünün istifadəsi aşağıdakı nümunədə göstərilmişdir. (Toplu nümunəni işə salmazdan əvvəl, Works_on cədvəlində bütün mövcud indeksləri atmalısınız. İndeksləri silmək üçün daha sonra göstəriləcək DROP INDEX ifadəsindən istifadə edin.)

    Nümunə Db-dən istifadə edin; DECLARE @dbId INT; DECLARE @tabId INT; ELAN EDİN @indId INT; SET @dbId = DB_ID("SampleDb"); SET @tabId = OBJECT_ID("İşçi"); sys.dm_db_index_physical_stats FROM (@dbId, @tabId, NULL, NULL, NULL);

    Nümunədən göründüyü kimi, sys.dm_db_index_physical_stats görünüşü beş parametrə malikdir. İlk üç parametr müvafiq olaraq cari verilənlər bazası, cədvəl və indeksin identifikatorlarını müəyyən edir. Dördüncü parametr bölmənin identifikatorunu, sonuncu parametr isə statistik məlumatı əldə etmək üçün istifadə edilən skan etmə səviyyəsini təyin edir. (Müəyyən bir parametr üçün standart dəyər NULL dəyərindən istifadə etməklə təyin edilə bilər.)

    Bu görünüşdəki sütunların ən vacibi avg_fragmentation_in_percent və avg_page_space_used_in_percent sütunlarıdır. Birincisi, parçalanmanın orta səviyyəsini faizlə, ikincisi isə işğal olunmuş yerin miqdarını faizlə müəyyən edir.

    İndeks məlumatının redaktə edilməsi

    Əvvəlki bölmədə müzakirə edildiyi kimi indeksin parçalanması məlumatı ilə tanış olduqdan sonra aşağıdakı sistem alətlərindən istifadə edərək bu və digər indeks məlumatlarını redaktə edə bilərsiniz:

      kataloq baxışları sys.indexes;

      kataloq baxışları sys.index_columns;

      sistem proseduru sp_helpindex;

      obyekt mülkiyyəti funksiyaları;

      SQL Server Management Studio idarəetmə mühiti;

      DMV dinamik idarəetmə görünüşü sys.dm_db_index_usage_stats;

      DMV dinamik idarəetmə görünüşü sys.dm_db_missing_index_details.

    Kataloq görünüşü sys.indexes hər bir indeks üçün bir sıra və çoxluq indeksi olmayan hər bir cədvəl üçün bir sıra ehtiva edir. Bu kataloq görünüşünün ən mühüm sütunları obyekt_id, ad və indeks_id sütunlarıdır. object_id sütununda indeksə sahib olan verilənlər bazası obyektinin adı, ad və index_id sütunlarında isə müvafiq olaraq həmin indeksin adı və identifikatoru var.

    Kataloq görünüşü sys.index_columns indeksin və ya yığının bir hissəsi olan hər bir sütun üçün bir sıra ehtiva edir. Göstərilən indeksin xüsusiyyətləri haqqında əlavə məlumat əldə etmək üçün bu məlumat sys.indexes kataloq görünüşü vasitəsilə əldə edilən məlumatlarla birlikdə istifadə edilə bilər.

    Sistem proseduru sp_helpindex Cədvəl indeksləri haqqında məlumatları, eləcə də sütunlar üçün statistik məlumatları qaytarır. Bu prosedur aşağıdakı sintaksisə malikdir:

    sp_helpindex [@db_object = ] "ad"

    Burada @db_object dəyişəni cədvəlin adını təmsil edir.

    İndekslərə münasibətdə, obyekt xassə funksiyası iki xüsusiyyətə malikdir: IsIndexed və IsIndexable. Birinci xüsusiyyət cədvəlin və ya görünüşün indeksə malik olub-olmaması haqqında məlumat verir, ikinci xüsusiyyət isə cədvəlin və ya görünüşün indeksləşdirilə biləcəyini göstərir.

    SQL Server Management Studio proqramından istifadə edərək mövcud indeks məlumatlarını redaktə etmək üçün Databases qovluğunda istədiyiniz verilənlər bazasını seçin, Cədvəllər qovşağını genişləndirin və həmin qovşaqda istədiyiniz cədvəli və onun İndekslər qovluğunu genişləndirin. Cədvəlin İndekslər qovluğu həmin cədvəl üçün bütün mövcud indekslərin siyahısını göstərəcək. İndeksin üzərinə iki dəfə kliklədikdə, həmin indeksin xüsusiyyətləri ilə İndeks Xüsusiyyətləri informasiya qutusu açılacaqdır. (Siz həmçinin Management Studio-dan istifadə edərək yeni indeks yarada və ya mövcud indeksi silə bilərsiniz.)

    Performans sys.dm_db_index_usage_stats müxtəlif növ indeks əməliyyatlarının sayını və hər bir əməliyyat növünün sonuncu dəfə yerinə yetirildiyini qaytarır. Tək sorğuda müəyyən edilmiş indeks üzrə hər bir ayrıca axtarış, axtarış və ya yeniləmə əməliyyatı indeksin istifadəsi hesab olunur və həmin DMV-də müvafiq sayğacı bir dəfə artırır. Beləliklə, siz indeksin nə qədər tez-tez istifadə edildiyi haqqında ümumi məlumat əldə edə bilərsiniz, beləliklə, hansı indekslərin daha çox və hansının daha az istifadə edildiyini müəyyən etmək üçün istifadə edə bilərsiniz.

    Performans sys.dm_db_missing_index_detailsİndeksləri olmayan cədvəl sütunları haqqında ətraflı məlumatı qaytarır. Bu DMV-nin ən vacib sütunları index_handle və object_id sütunlarıdır. Birinci sütundakı dəyər xüsusi çatışmayan indeksi, ikinci sütundakı dəyər isə indeksin çatışmadığı cədvəli müəyyən edir.

    İndekslərin dəyişdirilməsi

    Verilənlər Bazası Mühərriki bəyanatı dəstəkləyən bir neçə verilənlər bazası sistemlərindən biridir DEĞİŞTİRİN. Bu ifadə indeksə qulluq əməliyyatlarını yerinə yetirmək üçün istifadə edilə bilər. ALTER INDEX ifadəsinin sintaksisi CREATE INDEX ifadəsinin sintaksisinə çox bənzəyir. Başqa sözlə, bu ifadə CREATE INDEX ifadəsində əvvəllər təsvir edilmiş ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY və STATISTICS_NORECOMPUTE parametrlərinin dəyərlərini dəyişməyə imkan verir.

    Yuxarıdakı seçimlərə əlavə olaraq, ALTER INDEX bəyanatı daha üç variantı dəstəkləyir:

      YENİDAN YAPMA parametri, indeksi yenidən yaratmaq üçün istifadə olunur;

      YENİDƏN TƏŞKİL EDİN parametr, indeks node səhifələrini yenidən təşkil etmək üçün istifadə olunur;

      DISABLE parametri, indeksi söndürmək üçün istifadə olunur. Bu üç variant aşağıdakı alt bölmələrdə müzakirə olunur.

    İndeksin yenidən qurulması

    INSERT, UPDATE və ya DELETE ifadələrindən istifadə etməklə verilənlərə edilən hər hansı dəyişiklik məlumatın parçalanması ilə nəticələnə bilər. Bu məlumatlar indeksləşdirilibsə, indeks məlumatı müxtəlif fiziki səhifələrə səpələnmiş olmaqla indeksin parçalanması da mümkündür. İndeks məlumatlarının parçalanması nəticəsində Verilənlər Bazasının Mühərriki əlavə məlumat oxuma əməliyyatlarını yerinə yetirməyə məcbur ola bilər ki, bu da sistemin ümumi performansını azaldır. Bu halda, bütün parçalanmış indeksləri YENİDƏN YAPMAQ lazımdır.

    Bu iki yolla edilə bilər:

      ALTER INDEX bəyanatının REBUILD parametri vasitəsilə;

      CREATE INDEX ifadəsinin DROP_EXISTING parametri vasitəsilə.

    REBUILD parametri indeksləri yenidən qurmaq üçün istifadə olunur. Bu parametr üçün indeks adının yerinə ALL-ı göstərsəniz, cədvəldəki bütün indekslər yenidən yaradılacaq. (İndekslərin dinamik şəkildə yenidən yaradılmasına icazə verməklə, onları atıb yenidən yaratmağa ehtiyac qalmayacaq.)

    CREATE INDEX ifadəsinin DROP_EXISTING seçimi, həmçinin qruplaşdırılmamış indeksləri olan cədvəldə klasterli indeksi yenidən yaratarkən performansı yaxşılaşdıra bilər. O, müəyyən edir ki, mövcud klasterli və ya qeyri-klaster indeksi atılmalı və göstərilən indeks yenidən yaradılmalıdır. Daha əvvəl qeyd edildiyi kimi, klasterli cədvəldəki hər bir qruplaşdırılmamış indeks öz ağac qovşaqlarında cədvəlin klaster indeksinin müvafiq dəyərlərini ehtiva edir. Bu səbəbdən, klasterli indeksi cədvələ atdığınız zaman onun bütün klaster olmayan indekslərini yenidən yaratmalısınız. DROP_EXISTING parametrindən istifadə qruplaşdırılmamış indeksləri yenidən yaratmağın qarşısını alır.

    DROP_EXISTING seçimi YENİDƏN YAPAMA seçimindən daha güclüdür, çünki o, daha çevikdir və indeksi təşkil edən sütunların dəyişdirilməsi və klasterli olmayan indeksin klasterli birinə dəyişdirilməsi kimi bir neçə variant təqdim edir.

    İndeks qovşağı səhifələrinin yenidən təşkili

    ALTER INDEX ifadəsinin REORGANIZE parametri göstərilən indeksdəki qovşaqların səhifələrini elə yenidən təşkil edir ki, səhifələrin fiziki sırası onların məntiqi sırasına soldan sağa uyğun olsun. Bu, indeks performansını yaxşılaşdıraraq müəyyən miqdarda indeks parçalanmasını aradan qaldırır.

    İndeksi söndürün

    DISABLE seçimi göstərilən indeksi qeyri-aktiv edir. Deaktiv edilmiş indeks yenidən aktiv edilənə qədər istifadə üçün əlçatan deyil. Nəzərə alın ki, əlaqəli məlumatlara dəyişikliklər edildikdə, əlil indeksi dəyişmir. Bu səbəbdən, əlil indeksdən yenidən istifadə etmək üçün tamamilə yenidən yaradılmalıdır. Əlil indeksi aktivləşdirmək üçün ALTER TABLE ifadəsinin YENİDƏN YAPILMASI seçimindən istifadə edin.

    Cədvəldəki klaster indeksi deaktiv edildikdə, cədvəlin məlumatlarına daxil olmaq mümkün olmayacaq, çünki klaster indeksi olan cədvəlin bütün məlumat səhifələri onun ağac qovşaqlarında saxlanılır.

    İndekslərin silinməsi və adının dəyişdirilməsi

    Cari verilənlər bazasındakı indeksləri silmək üçün istifadə edin DROP INDEX təlimatı. Qeyd edək ki, klasterli indeksi cədvələ atmaq çox resurs tələb edən əməliyyat ola bilər, çünki Bütün qeyri-klaster indeksləri yenidən yaradılmalıdır. (Bütün qruplaşdırılmamış indekslər qovşaq səhifələrində göstərici kimi çoxluqlu indeksin indeks açarından istifadə edir.) İndeksi buraxmaq üçün DROP INDEX ifadəsindən istifadə aşağıdakı nümunədə təsvir edilmişdir:

    Nümunə Db-dən istifadə edin; DROP INDEX ix_empid ON İşçi;

    DROP INDEX təlimatında əlavə var Parametrə KEÇİN, mənası CREATE INDEX ifadəsinin ON parametri ilə eynidir. Başqa sözlə, siz bu parametrdən kümelenmiş indeks qovşağı səhifələrində olan məlumat sətirlərinin hara köçürüləcəyini təyin etmək üçün istifadə edə bilərsiniz. Məlumat yığın kimi yeni yerə köçürülür. Yeni məlumat saxlama yeri üçün ya standart fayl qrupu və ya adlandırılmış fayl qrupu təyin edə bilərsiniz.

    DROP INDEX bəyanatı PRIMARY KEY və UNIQUE indeksləri kimi bütövlük məhdudiyyətləri üçün sistem tərəfindən gizli şəkildə yaradılmış indeksləri silmək üçün istifadə edilə bilməz. Belə indeksləri silmək üçün müvafiq məhdudiyyəti aradan qaldırmalısınız.

    İndekslərin adları sp_rename sistem prosedurundan istifadə etməklə dəyişdirilə bilər.

    İndekslər həmçinin Database Diaqramları və ya Object Explorer istifadə edərək Management Studio-da yaradıla, dəyişdirilə və silinə bilər. Amma ən asan yol tələb olunan cədvəlin İndekslər qovluğundan istifadə etməkdir. Management Studio-da indekslərin idarə edilməsi Management Studio-da cədvəllərin idarə edilməsinə bənzəyir.

    Verilənlər Bazası Mühərriki indekslərin sayına praktiki məhdudiyyət qoymasa da, sayını məhdudlaşdırmağınızın bir neçə səbəbi var. Birincisi, hər bir indeks diskdə müəyyən yer tutur, ona görə də verilənlər bazası indeks səhifələrinin ümumi sayının verilənlər bazasındakı məlumat səhifələrinin sayından çox ola bilmə ehtimalı var. İkincisi, verilənləri əldə etmək üçün indeksdən istifadə etməyin faydasından fərqli olaraq, verilənlərin daxil edilməsi və silinməsi indeksi saxlamaq zərurəti ilə əlaqədar belə fayda vermir. Cədvəldə nə qədər çox indeks varsa, onları yenidən təşkil etmək üçün bir o qədər çox iş tələb olunur. Bir qayda olaraq, tez-tez verilən sorğular üçün indeksləri seçmək və sonra onların istifadəsini qiymətləndirmək müdrikdir.

    İndekslərin yaradılması və istifadəsi üçün bəzi təlimatlar bu bölmədə verilmişdir. Aşağıdakı tövsiyələr yalnız ümumi qaydalardır. Nəticə etibarı ilə onların effektivliyi verilənlər bazasının praktikada necə istifadə olunduğundan və ən çox yerinə yetirilən sorğuların növündən asılı olacaq. Heç vaxt istifadə edilməyəcək bir sütunun indeksləşdirilməsi heç bir xeyir verməyəcək.

    İndekslər və WHERE bəndinin şərtləri

    Əgər SELECT ifadəsinin WHERE bəndində bir sütunlu axtarış şərti varsa, o zaman həmin sütunda indeks yaradılmalıdır. Bu, xüsusilə yüksək seçicilik şəraitində tövsiyə olunur. Şərtin seçiciliyi dedikdə şərti ödəyən sətirlərin sayının cədvəldəki sətirlərin ümumi sayına nisbətini nəzərdə tuturuq. Yüksək seçicilik bu nisbətin aşağı dəyərinə uyğundur. Şərt seçiciliyi 5%-dən az olduqda indeksləşdirilmiş sütundan istifadə edərək axtarışın işlənməsi ən uğurlu olacaqdır.

    Şərtin seçicilik səviyyəsi sabit 80% və ya daha çox olarsa, sütun indeksləşdirilməməlidir. Bu halda, indeks səhifələri əlavə I/O əməliyyatlarını tələb edəcək ki, bu da indekslərdən istifadə etməklə əldə edilən istənilən vaxta qənaəti azaldacaq. Bu halda, cədvəli skan etməklə axtarışı yerinə yetirmək daha sürətli olur, sorğu optimallaşdırıcısı adətən bunu seçir və indeksi yararsız edir.

    Əgər tez-tez istifadə olunan sorğunun axtarış şərti AND operatorlarını ehtiva edirsə, ən yaxşı seçiminiz SELECT ifadəsinin WHERE bəndində göstərilən bütün cədvəl sütunlarında mürəkkəb indeks yaratmaqdır. Belə bir kompozit indeksin yaradılması aşağıdakı nümunədə göstərilmişdir:

    Bu nümunə WHERE bəndinin bütün sütunlarında mürəkkəb indeks yaradır. Bu sorğuda iki şərt birlikdə AND edilir, ona görə də bu şərtlərdə hər iki sütunda mürəkkəb qruplaşdırılmamış indeks yaratmalısınız.

    İndekslər və birləşmə operatoru

    Qoşulma əməliyyatı üçün birləşdirilən hər bir sütunda indeks yaratmaq tövsiyə olunur. Birləşdirilmiş sütunlar çox vaxt bir cədvəlin əsas açarını və digər cədvəlin müvafiq xarici açarını təmsil edir. Müvafiq birləşmə sütunlarında PRIMARY KEY və FOREIGN KEY bütövlüyü məhdudiyyətlərini təyin etsəniz, xarici açar sütununda yalnız qruplaşdırılmamış indeks yaratmalısınız, çünki sistem dolayısı ilə əsas açar sütununda çoxluq indeksi yaradacaq.

    Aşağıdakı nümunə qoşulma əməliyyatı və əlavə filtrlə sorğunuz varsa istifadə olunacaq indekslərin necə yaradılacağını göstərir:

    Örtmə indeksi

    Daha əvvəl qeyd edildiyi kimi, bütün sorğu sütunlarının indeksə daxil edilməsi sorğunun performansını əhəmiyyətli dərəcədə yaxşılaşdıra bilər. Örtmə adlanan belə bir indeksin yaradılması aşağıdakı nümunədə göstərilmişdir:

    AdventureWorks2012-dən istifadə edin; GO DROP INDEX Person.Address.IX_Address_StateProvinceID; GEDİN ŞƏXS ÜZRƏ ix_address_zip YARAT INDEX.Ünvan(Poçt Kodu) DAXİL EDİN(Şəhər, StateProvinceID); ŞƏXSİNDƏN ŞƏHƏRİ, Ştat Əyalətini SEÇİN. Ünvan HARADA Poçt Kodu = 84407;

    Bu nümunə əvvəlcə IX_Address_StateProvinceID indeksini Ünvan cədvəlindən silir. Daha sonra Poçt Kodu sütununa əlavə olaraq iki əlavə sütunu özündə birləşdirən yeni indeks yaradılır. Nəhayət, nümunənin sonundakı SELECT ifadəsi indeksin əhatə etdiyi sorğunu göstərir. Bu sorğu üçün sistemin məlumat səhifələrində məlumat axtarmasına ehtiyac yoxdur, çünki sorğu optimallaşdırıcısı bütün sütun dəyərlərini qruplaşdırılmamış indeks qovşağı səhifələrində tapa bilər.

    İndekslərin örtülməsi tövsiyə olunur, çünki indeks səhifələri adətən müvafiq məlumat səhifələrindən daha çox girişi ehtiva edir. Əlavə olaraq, bu metoddan istifadə etmək üçün süzülən sütunlar indeksdəki ilk əsas sütunlar olmalıdır.

    Hesablanmış sütunlar üzrə indekslər

    Verilənlər Bazası Mühərriki sizə aşağıdakı xüsusi növ indeksləri yaratmağa imkan verir:

      indeksləşdirilmiş baxışlar;

      süzülə bilən indekslər;

      hesablanmış sütunlar üzrə indekslər;

      bölünmüş indekslər;

      sütun davamlılıq indeksləri;

      XML indeksləri;

      tam mətn indeksləri.

    Bu bölmədə hesablanmış sütunlar və onlarla əlaqəli indekslər müzakirə olunur.

    Hesablanmış sütun cədvəl məlumatlarının hesablamalarının nəticələrinin saxlandığı cədvəl sütunudur. Belə bir sütun virtual və ya davamlı ola bilər. Bu iki sütun növü aşağıdakı alt bölmələrdə müzakirə olunur.

    Virtual hesablanmış sütunlar

    Müvafiq klaster indeksi olmayan hesablanmış sütun məntiqi sütundur, yəni. o, fiziki olaraq sabit diskdə saxlanmır. Beləliklə, cərgəyə hər dəfə daxil olanda qiymətləndirilir. Virtual hesablanmış sütunların istifadəsi aşağıdakı nümunədə göstərilmişdir:

    Nümunə Db-dən istifadə edin; CƏDVƏL Sifarişlər YARADIN (Sifariş ID INT NULL DEYİL, Qiymət PUL NULL DEYİL, Miqdarı INT NULL DEYİL, Sifariş Tarixi TARİX SAAT NULL DEYİL, Cəmi Qiymət AS * Miqdar, Göndərilmə Tarixi ƏLAVƏ TARİXİ (GÜN, 7, sifariş tarixi));

    Bu nümunədəki Sifarişlər cədvəlində iki virtual hesablanmış sütun var: cəmi və göndərilmə tarixi. Ümumi sütun digər iki sütundan, qiymət və kəmiyyətdən, göndərilmə tarixi sütunu isə DATEADD funksiyasından və sifariş tarixi sütunundan istifadə etməklə hesablanır.

    Daimi hesablanmış sütunlar

    Verilənlər Bazasının Mühərriki əsas sütunların dəqiq məlumat növlərinə malik olduğu deterministik hesablanmış sütunlarda indekslər yaratmağa imkan verir. (Hesablanmış sütun həmişə eyni cədvəl məlumatları üçün eyni dəyərləri qaytarırsa, deterministik hesab olunur.)

    İndekslənmiş hesablanmış sütun yalnız SET ifadəsinin aşağıdakı parametrləri ON-a təyin edildikdə yaradıla bilər (bu parametrlər sütunun deterministik olmasını təmin edir):

      QUOTED_IDENTIFIER

      CONCAT_NULL_YIELDS_NULL

    Bundan əlavə, NUMERIC_ROUNDABORT parametri söndürülməlidir.

    Hesablanmış sütunda çoxluq indeksi yaratsanız, sütunun dəyərləri müvafiq cədvəl sətirlərində fiziki olaraq mövcud olacaq, çünki çoxluqlu indeksin qovşaq səhifələrində məlumat sətirləri var. Aşağıdakı nümunə Sifarişlər cədvəlindən hesablanmış sütun cəmində klasterli indeks yaradır:

    Nümunə Db-dən istifadə edin; Sifarişlər üzrə ix1 KLASTERLİ İNDEKSİ YARATIN (Cəmi);

    CREATE INDEX ifadəsini yerinə yetirdikdən sonra hesablanmış ümumi sütun fiziki olaraq cədvəldə olacaq. Bu o deməkdir ki, hesablanmış sütunun əsas sütunlarına edilən bütün yeniləmələr onun yenilənməsinə səbəb olacaq.

    Sütun istifadə edərək başqa bir şəkildə sabit edilə bilər DAVAMLI parametr. Bu seçim hətta müvafiq klaster indeksi yaratmadan hesablanmış sütunun fiziki mövcudluğunu təyin etməyə imkan verir. Bu qabiliyyət təxmini məlumat növü (float və ya real) olan sütunlarda yaradılan fiziki hesablanmış sütunlar yaratmaq üçün tələb olunur. (Əvvəlcə qeyd edildiyi kimi, indeks yalnız hesablanmış sütunda yaradıla bilər, o halda ki, onun əsas sütunları dəqiq məlumat növüdür.)