DBMS-də maddi baxışlar (MV)

Tutaq ki, bir neçə böyük masaya və kiçik masalara qoşulmuş bir sorğumuz var və bu sorğu istifadəçi tərəfindən ən çox istifadə olunur. İstifadəçi hər dəfə işə saldıqda sorğu və onun performansı ilə nə baş verir? Optimizator hər dəfə yuxarıdakı metodlardan istifadə edərək qiymətləndirəcək və onu qiymətləndirmək üçün optimal xərc və yolu görməyə çalışacaq. O böyükləri keçir masaları hər dəfə sorğunun performansını aşağı salır. Ancaq təsəvvür edin, başqa bir masada və ya görünüşdə o böyük masa seçimlərinin nəticəsi olsaydı, performans nə olacaq? Qeydlərin sayı azalacaq; böyük masalara daxil olmaq xərclərini azaldacaq.

Maliyyənin azaldılması və sorğunun performansının artırılması konsepsiyası maddi baxışların yaranmasına səbəb olur. Bu baxışlar sorğuların istifadəsi ilə yaradılır və nəticəsi baxışlarda saxlanılır. Digər masalar kimi davranırlar. Bu baxışlar yaradılacaq və sorğu yerinə yetirilmədən əvvəl məlumatlar çox saxlanacaqdır. Sorğu hər hansı bir cədvəl kimi bu görünüşü əldə edəcək və ondan lazımi qeydləri əldə edəcəkdir. Digər sorğularda da iştirak edə bilər. Hər hansı digər cədvəl, baxış və ya başqa maddi baxışlarla birləşdirilə bilər.

Ancaq bu maddiləşmiş baxışlar iş vaxtında yaradılmır. Bunlar əvvəlcədən tərtib edilir və icra olunur. Beləliklə, cədvəllərə maddi görünüş istifadə edərək sorğu verən yeni qeydlər əlavə edilərsə, MV yeni qeydlərlə yenilənməzdi. Yeni əlavə edilmədən əvvəl qeydləri olacaq. Bu səbəbdən MV-nin yenilənməsi daha vacibdir. Əks təqdirdə nəticədə bəzi qeydləri itirəcəyik. MV qeydlərinin yeniləşdirilməsinə maddi baxış baxımları deyilir. Hər dəfə yeni bir qeyd yerləşdirildikdə / yeniləndikdə / əsas masalardan silindikdə MV-ni yeniləməliyik. Ancaq bu, hər dəfə yenilənmək üçün baha başa gələn bir səy olardı, çünki bu, əsas sorğunu təkrar-təkrar işlədməklə eynidir.

Bunun əvəzinə, MV-yə yeniləməni artan qaydada etsək, yenilənmə müddətini azaldacaq. Aşağıdakı metodlardan hər hansı birində artan yeniləmə edə bilərik

  • Əsas masada bir əlavə / silmək / yeniləmə olduqda, MV-də qeydləri atəşə vermək və yeniləmək üçün bir tetik yazılır. yəni; MV-dəki cədvəllərdən təsirlənmiş qeydləri əlavə edəcək / siləcək / yeniləyəcəkdir.
  • MV -ni yeniləmək üçün bir prosedur yazıla bilər DML masalarda.
  • Cədvəldəki qeydlərdə hər dəfə dəyişiklik olduqda verilənlər bazasını təzələmək əvəzinə vaxtaşırı təravətləndirin. yəni; Gecə bir dəfə təravətləndirin və ya gündə iki dəfə təravətləndirici MV, əsas masalarla yenilənməsi üçün. MV gecə və ya başqa bir vaxt yeniləndiyindən bu metod qeydlərdə çox az fərqlənə bilər. Bu müddət ərzində hər hansı bir istək olarsa, iki yeniləmə arasında qeydlər mövcud olmayacaq.

İndi əsas masalarda dəyişiklik olduqda MV-lərin tədricən necə təzələnəcəyini görək. Təravətləndirici texnika, MV sorğusunda istifadə olunan əməliyyatlara görə dəyişir. Tutaq ki, T və S, MV-nin yaradılmasında iştirak edən iki cədvəldir. T cədvəlində bəzi dəyişikliklər olsun - əlavə və ya silinmiş ola bilər və Told və Tnew cədvəldəki dəyişikliklərdən əvvəl və sonra cədvələ müraciət etsinlər. Ri və Rd daxil edilmiş qeydlər dəsti və silinmiş qeydlər dəsti olsun. İndi aşağıdakı MV-lərin artan təzələnməsinin fərqli hallarına baxaq:

qoşulmaq

Tutaq ki, T və S cədvəlinə qoşulma nəticəsində MV-yə sahibik. Tutaq ki, T cədvəlinə daxil edilmiş qeydlər dəstimiz var. İndi artan yeniləmə yeni daxil edilmiş qeydləri yoxlayacaq və yalnız onları S cədvəli ilə birləşdirib MV-yə əlavə edəcək. . Bunun səbəbi; MV, T və S-yə qoşulma nəticəsində onsuz da köhnə qeydlərə sahibdir. Bunun üçün yalnız yeni əlavələrə ehtiyac var.

Qoy MV = T ∞S = MVold
Artıq MVnew = Tnew∞ S = (U Ri izah edildi) ∞ S = (Told ∞ S) U (Ri∞ S) = MVold U (Ri∞ S)

Bunu əldə etmək üçün bütün çevrilmələr ekvivalentlik qaydasına əsaslanır. Beləliklə, yenilənmiş maddi görünüş yeni daxil edilmiş qeydlər ilə cədvəl S arasındakı birləşmədir. Yeni qeydlər qrupu nisbətən az olacağı üçün bu daha az xərc tələb edəcəkdir.
Buna əsaslanan bir nümunəni nəzərdən keçirək. Tələbə və SINIF cədvəlindəki bir sorğudan tələbə kimliyi, adı, ünvanı, sinif id və sinif adı ilə aşağıda göstərildiyi kimi maddi bir görünüşümüz olduğunu düşünək:

İndi TƏLƏBƏ cədvəlinə aşağıda satırlar əlavə olunsun.

 

Yuxarıdakı diaqramdan aydın olur ki, MV_STD_CLASS-a yalnız iki yeni qeyd əlavə etməliyik. Beləliklə, aşağıdakı kimi edilə bilər:

 

Fərz edək ki, T cədvəlindən bəzi qeydlər silindi, sonra eyni prosedur təkrarlanır, lakin silinmiş qeyd mövcud MV-dən aşağıdakı kimi silinir:

Qoy MV = T ∞S = MVold
Artıq MVnew = Tnew∞ S = (Told - Rd) ∞ S = (Told ∞ S) - (Rd∞ S) = MVold - (Rd∞ S)

Məsələn yuxarıda, silmək zamanı aşağıda göstərildiyi kimi ola bilər:

 

Xarici qoşulur

Bu yuxarıdakı əməliyyatlara qoşulmağa bənzəyir. Yeganə fərq budur; digər cədvəllərdə olmayan əlavə qeydlərə baxmalıdır. Buna görə əvvəlcə yuxarıdakı kimi normal birləşmələri yerinə yetirəcəkdir. Sonra qoşulmada iştirak etməyən birinci cədvəlin qeydlərini götürəcək və NULL olaraq digər cədvəlin sütunları ilə MV-yə əlavə edəcəkdir.

Tutaq ki, bizdə var MV = T ∞ sol xarici birləşmə S

Cədvəl T-də yeni qeydlər olduqda, qeydlərin uyğunluğu üçün C cədvəlini yoxlayacaqdır. Varsa, hər iki cədvəldəki qeydləri əlavə edəcəkdir. Heç bir uyğunluq tapılmadıqda, birinci cədvəlin qeydlərini MV-yə əlavə edəcək və digər cədvəl sütunlarını NULL edəcəkdir.

Qeydlər T cədvəlindən silindikdə, MV-dən qeyd silinəcəkdir. Əgər qeydlər S-dən silinərsə, MV-də olan qeydləri MV-dən silmək əvəzinə MV-də S sütunlarını NULL edəcəkdir.

Seçim və proyeksiya

Fərz edək ki, T cədvəlində seçim əməliyyatımız var, yəni; T-nin alt hissəsini əldə etmək üçün bəzi qeydlər qrupunu süzgəcdən keçiririk. Tutaq ki, bu iş üçün T-də MV yaratdıq və T-yə bəzi yeni qeydlər əlavə etdik. MV = σ θ (T) = MVold
İndi yeni MV: MVnew = σ θ (Tnew) = σ θ (UR i dedim) = σ θ (Told) U σ θ (R i) = MVold U σ θ (R i)
yəni; yeni qeydlərə seçim tətbiq etdikdən sonra yeni qeydləri MV-yə əlavə etməliyik. Eynilə, silmə əməliyyatımız olduqda, silinən qeydlərdə seçim əməliyyatını tətbiq etdikdən sonra qeydləri silmək məcburiyyətindəyik.
İndi silmədən sonra yeni MV: MVnew = σ θ (Tnew) = σ θ (Told -R d) = σ θ (Told) - σ θ (R d) = MVold - σ θ (Rd)

 

Proyeksiya əməliyyatını nəzərdən keçirək. Proyeksiya əməliyyatı tətbiq edərkən masadan sütunları seçirik. MV-nin proyeksiya ilə təzələnməsi bütün hallardan fərqlidir. Burada yazıları hər zaman silmirik, çünki sütun seçimini əhatə edir. Burada hər dəfə yerləşdirildikdə və ya silindikdə sütunların sayını saxlayırıq. Cədvəldən tamamilə silinirsə, MV-dən qeydləri silirik.

Cədvələ qeydlər daxil edildikdə, sütunun MV-də mövcud olub olmadığını yoxlayırıq və bəli, sayını artırırıq; başqa bir halda yeni qeyd əlavə edib sayını birinə başlayırıq.
Qeydlərin silinməsi olduqda, sayını azaldırıq; say sıfıra çatdıqda, bütün qeydləri MV-dən silirik.

Bir nümunə istifadə edərək başa düşək. TƏLƏBƏ cədvəlindən fərqli CLASS_ID ilə maddi bir görünüşümüz olduğunu düşünək. Burada cədvəldə eyni CLASS_ID ilə birdən çox qeydlər ola bilər və sayının sayı yenilənən MV üçün saxlanılacaqdır. Aşağıdakı cədvəl diaqramına baxın.
yəni; MV = ∏CLASS_ID (TƏLƏBƏ)

 

Artan yeniləmə, yuxarıdakı vəziyyətdə DESIGN_01 sayını 3, DESIGN_02'yi 1, TEST_01'ı 1 və TEST_02'yi 1 olaraq saxlayacaq. TƏLƏBƏ cədvəlində bunların baş vermə sayıdır. TƏLƏBƏ cədvəlinə yeni girişimiz olduğunu düşünək. Sonra MV olardı:

 

Yeni qeydlərin əvvəlki ilə eyni sütun dəyərlərinə sahib olduğu üçün MV üçün heç bir fərq olmadığını görürük. Ancaq TEST_01 və TEST_02 sayını izləmək üçün 2-yə artırılır.
Tutaq ki, yeni CLASS_ID ilə yeni bir qeydimiz var. Sonra yeni CLASS_ID sayı izləyicisində sıfır olar, buna görə onu MV-yə əlavə edir və sayını bir olaraq artırır.

 

Tutaq ki, MV-də STD_NAME və CLASS_ID seçmişik. Sonra yuxarıdakı hər iki halda da yeni qeyd MV-yə say artımı ilə birlikdə daxil ediləcəkdir.

İndi STUDENT-dən qeydləri silməyə başlayaq, STD_ID = 100 ilə tələbə qeydlərini sildik deyək. O zaman MV belə olacaq:

 

MV-də heç bir dəyişiklik olmadığını, lakin DESIGN_01 sayının 2-yə endirildiyini müşahidə edirik. Tutaq ki, DESIGN_02 qeydini sildik. İndi sayını sıfıra endirəcək. İndi sıfır olduğundan qeyd MV-dən silinəcəkdir.

Tutaq ki, MV-də STD_NAME və CLASS_ID seçmişik. Sonra yuxarıdakı hər iki silmə vəziyyətində, müvafiq qeydlər MV-dən say azalma ilə birlikdə silinəcəkdir.

MV-dəki proyeksiya belə təzələnir.

Toplama / Qruplaşdırma

Burada say, cəm, max, min və s. Kimi müxtəlif tipli birləşmələrimiz var.

  • Say: Hər bir qrupun qeydlərinin sayını hesablayarkən, proyeksiyadakı kimi qeydləri izləməlidir, ancaq MV-də sütun olaraq əlavə edilməlidir. Fərz edək ki, T cədvəlinə yeni bir qeyd qoyduq. Sonra yeni qeydin MV-də mövcud olub olmadığını yoxlayacaq. Varsa, sayını bir-bir artırır, əks halda 1-ə bərabər sayda MV-yə yeni bir qeyd əlavə edir. T cədvəlindən qeydlərin silinməsi olduqda MV-dən sayını azaldır. Sayı sıfıra çatırsa, MV-dən bu qeydləri silir.

  • CƏMİ: Bu toplama saymağa bənzəyir, lakin artırmaq əvəzinə sütunların dəyərini əlavə edir / çıxardır. Bundan əlavə, hər qrupun cədvəldən tamamilə silinib-silinmədiyini izləmək və COUNT-da olduğu kimi MV-dən silmək üçün sayını saxlayır.

  • AVG: Burada AVG-ni hesablamaq üçün həm COUNT, həm də cəmi ayrı-ayrılıqda yerinə yetiririk.
  • MAX və MIN: MAX və ya MIN taparkən, yeni qoyulmuş dəyəri MV-də maksimum və ya min dəyəri ilə müqayisə edəcək və MV-dəki dəyəri buna uyğun olaraq yeniləməli olub-olmadığına qərar verəcəkdir. Yazını sildikdə, MV-dəki dəyərlə müqayisə ediləcək və silinən qeyd maksimum və ya min dəyər deyilsə, heç bir səy göstərilmir. Ancaq silinən qeyd maksimum və ya min dəyərdirsə, cədvəldə digər qeydlərin məlumatları olmadığı üçün masadan yenidən MAX və MIN hesablamalıdır. Yenidən bütün MV-ni yeniləməyə bənzədiyi üçün bu bir az bahalı iş olacaqdır.

INTERSECT, BİRLİK və FƏRQLİYYƏ təyin edin

Bütün bu əməliyyatlar eyni qaydada aparılır.
Tutaq ki, TV və S cədvəlinin kəsişməsi ilə MV yaradıldı, T cədvəlinə qeydlər daxil edildikdə, yeni qeyd S cədvəli ilə yoxlanılaraq orada olub olmadığını tapdı. Varsa, o zaman MV-yə əlavə olunacaq; əks halda buna məhəl qoyulmayacaq. Bir qeyd silindikdə, S-də mövcud olduğunu tapmaq üçün S-ə qarşı yoxlanılacaq. Varsa, o zaman MV-dən silinəcək; əks halda buna məhəl qoymaz.

Ayarlanan operator birliyi MV yaratmaq üçün istifadə edildikdə edilir. Yeni bir qeyd daxil edildikdə, MV-nin mövcudluğunu yoxlayır. Varsa, deməli görməzdən gəlir; əks halda qeydləri MV-yə əlavə edir. Bir qeyd silindikdə, varsa MV-dən qeydləri silər; başqa, buna məhəl qoymur.

Ayarlanmış fərq ilə eyni vəziyyətdir.

İfadələri :

İfadələrdə də yuxarıdakı hallarda gördüyümüz kimi artan qeydləri yeniləyə bilərik.
Tutaq ki, bizdə var E1 -E2 burada E1 və E2 və iki ifadə. Tutaq ki, R1, E1-ə əlavə edilmiş qeydlər toplusudur. Yeni qeydlərin iki ifadə arasındakı birləşməyə yenilənməsi cədvəllər arasındakı birləşmə ilə eynidir. yəni; birləşdirməyə təkrarən bütün ifadələri cəlb etmək əvəzinə yenilənməsini təmin etmək üçün yalnız yeni qeydlər dəsti birləşməyə cəlb olunur. Bu yeniləməni daha sürətli edəcəkdir.
Yeni E1 ∞E2 = Köhnə (E1 ∞E2) U (R1 ∞E2)

Sorğularda maddi baxışlar

Sualları qiymətləndirərkən maddi baxışların nə qədər faydalı olduğunu görək.
Tutaq ki, R, S və T cədvəlləri arasında birləşdik. Tutaq ki, T və S iki cədvəldə MV var. Sonra sorğu aşağıdakı kimi MV istifadə etmək üçün dəyişdirilə bilər:

MV = S ∞ T

Sorğu = R ∞S ∞ T → R ∞ MV

Lakin bütün hallarda maddi baxışdan istifadə etmək səmərəli olmayacaqdır. Tutaq ki, MV-də müəyyən edilmiş indeksimiz yoxdur. Ancaq MV-nin S və T fərdi cədvəllərində müəyyən edilmiş indeksimiz var. Sonra yuxarıdakı vəziyyətdə S ilə T arasındakı birləşmələri MV ilə əvəzləmək əvəzinə, olduğu kimi istifadə etmək daha yaxşı olardı. Çünki birləşmələri qiymətləndirmək üçün indeksdən istifadə edəcək və MV-dən daha sürətli olacaq.

Tutaq ki, MV yaratdığımız TƏLƏBƏ və SINIF masalarımız var. Tutaq ki, TƏLƏBƏ cədvəlinin YAŞ və SINIF cədvəlinin SINIFI üzrə indeksimiz var. Qeydləri TƏLƏBƏ, SINIF və TƏLİMÇİ masalarından almaq üçün sorğu göndərdik. Sualı əlaqəli cəbrdə aşağıdakı kimi təqdim edək:

Sorğu: σ YAŞ = 21 VƏ SINIF = 'DESIGN_01' (TƏLƏBƏ ∞ SINIF ∞ MÜƏLLİM)
MV: STD_CLS = TƏLƏBƏ ∞ SINIFI

Optimizatorun aşağıdakı sualları ola bilər:

  • σ YAŞ = 21 VƏ SINIF = 'DESIGN_01' (STD_CLS ∞ TEACHER)
  • σ YAŞ = 21 (TƏLƏBƏ) ∞ σ CLASS_NAME = 'DESIGN_01' (SINIF) ∞ Müəllim

İlk sorğu ifadəni qiymətləndirmək üçün MV istifadə edir. İkinci sorğu, onları qiymətləndirmək üçün müvafiq cədvəllərin indekslərindən istifadə edir. Hər iki halla müqayisədə, ikinci sorğu indeksdən istifadə etdikdə daha sürətli işləyəcəkdir. MV TƏLƏBƏ ilə SINIF arasında birləşmə xərclərini azaltsa da, burada indeksləşdirilməmiş cədvəl kimi davranır. MV-dən YAŞ və CLASS_NAME seçməliyik və bu şərt üçün hər bir qeyd bir-bir keçəcəkdir. Halbuki ilk sorğu qeydləri birbaşa müvafiq cədvəldən götürəcək və alt hissəsini kiçikləşdirəcək və sonra birləşdirməyi həyata keçirəcəkdir. Buna görə ilk sorğu effektivdir.

Sorğuları MV-lərlə əvəz edə bilsək də, hər cədvəlin statistikasını və MV-lərin istifadəsini hesablayan və daha yaxşı performans üçün hansından istifadə edəcəyinə qərar verən optimallaşdırıcıdır.

Translate »