БалансиранС Π½Π° записи ΠΈ чСтСния Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ

БалансиранС Π½Π° записи ΠΈ чСтСния Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ
Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Бтатия ΠžΠΏΠΈΡΠ°Ρ… концСпцията ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠΉ Π΄Π°Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‰ΠΈ прСдимствата Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€Π΅Π΄ класичСския. Мнозина Π³ΠΈ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…Π° Π·Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π½ΠΈ.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Ρ‚Π°Π·ΠΈ концСпция Π²ΠΈ позволява Π±ΡŠΡ€Π·ΠΎ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° балансиратС записи ΠΈ чСтСния Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π±Π΅Π· промяна Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ°. Подобна функционалност сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° бъдС Π²Π½Π΅Π΄Ρ€Π΅Π½Π° Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠΈ Π‘Π£Π‘Π” (ΠΏΠΎ-спСциално Oracle ΠΈ Microsoft SQL Server). Π’ края Π½Π° статията Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…Π°, ΠΌΠ΅ΠΊΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Π½Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅.

описаниС

ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€Π΅Π΄ΠΈ, Π·Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π° описаниСто с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ. Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ трябва Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΠ°, която Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ списък с ΠΎΡ‚Π΄Π΅Π»ΠΈ с броя Π½Π° слуТитСлитС Π² тях ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚Π° ΠΈΠΌ Π·Π°ΠΏΠ»Π°Ρ‚Π°.

Π’ΡŠΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

CLASS Department β€˜ΠžΡ‚дСл’;
name β€˜ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅β€™ = DATA STRING[100] (Department);

CLASS Employee β€˜Π‘отрудник’;
department β€˜ΠžΡ‚дСл’ = DATA Department (Employee);
salary β€˜Π—арплата’ =  DATA NUMERIC[10,2] (Employee);

countEmployees β€˜ΠšΠΎΠ»-Π²ΠΎ ΡΠΎΡ‚рудников’ (Department d) = 
    GROUP SUM 1 IF department(Employee e) = d;
salarySum β€˜Π‘уммарная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚а’ (Department d) = 
    GROUP SUM salary(Employee e) IF department(e) = d;

SELECT name(Department d), countEmployees(d), salarySum(d);

БлоТността Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ заявка във всяка Π‘Π£Π‘Π” Ρ‰Π΅ бъдС Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½Π° Π½Π° O(Π±Ρ€ΠΎΠΉ слуТитСли)Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° изчислСниС изисква сканиранС Π½Π° цялата Ρ‚Π°Π±Π»ΠΈΡ†Π° със слуТитСли ΠΈ слСд Ρ‚ΠΎΠ²Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈ. Π©Π΅ ΠΈΠΌΠ° ΠΈ някои ΠΌΠ°Π»ΠΊΠΈ (Π½ΠΈΠ΅ вярвамС, Ρ‡Π΅ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ слуТитСли, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈ) Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π² зависимост ΠΎΡ‚ избрания ΠΏΠ»Π°Π½ O (рСгистриран Π±Ρ€ΠΎΠΉ слуТитСли) ΠΈΠ»ΠΈ O (Π±Ρ€ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΠΈ) Π·Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

Ясно Π΅, Ρ‡Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° изпълнСниС ΠΌΠΎΠΆΠ΅ Π΄Π° са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π‘Π£Π‘Π”, Π½ΠΎ слоТността няма Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½.

Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° рСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π°Ρ‚Π° Π‘Π£Π‘Π” Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΅Π΄Π½Π° подзаявка, която Ρ‰Π΅ изчисли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ стойности Π·Π° ΠΎΡ‚Π΄Π΅Π»Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ JOIN с Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»Π°, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° всяка функция ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½Π΅ Π΅ възмоТно Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ спСциалСн ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ MATERIALIZED. БистСмата Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ създадС ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π·Π° всяка Ρ‚Π°ΠΊΠ°Π²Π° функция. ΠšΠΎΠ³Π°Ρ‚ΠΎ промСнятС стойността Π½Π° функция, стойността Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ Ρ‰Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡŠΡ‰Π°Ρ‚Π° транзакция. ΠŸΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚Π°Π·ΠΈ функция Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ изчислСното ΠΏΠΎΠ»Π΅.

По-спСциално, Π°ΠΊΠΎ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ MATERIALIZED Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ countEmployees ΠΈ Π·Π°ΠΏΠ»Π°Ρ‚Π°Sum, Ρ‚ΠΎΠ³Π°Π²Π° към Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° със списъка Π½Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄Π²Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ броя Π½Π° слуТитСлитС ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚Π° ΠΈΠΌ Π·Π°ΠΏΠ»Π°Ρ‚Π°. Π’ΠΈΠ½Π°Π³ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° промяна Π² слуТитСлитС, Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈ ΠΈΠ»ΠΈ принадлСТност към ΠΎΡ‚Π΄Π΅Π», систСмата Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ стойноститС Π½Π° Ρ‚Π΅Π·ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°. Π“ΠΎΡ€Π½Π°Ρ‚Π° заявка Ρ‰Π΅ ΠΈΠΌΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚Π΅Π·ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΈ Ρ‰Π΅ бъдС изпълнСна Π² O (Π±Ρ€ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΠΈ).

Какви са ограничСнията? Π‘Π°ΠΌΠΎ Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ: Ρ‚Π°ΠΊΠ°Π²Π° функция трябва Π΄Π° ΠΈΠΌΠ° ΠΊΡ€Π°Π΅Π½ Π±Ρ€ΠΎΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΈ стойности, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Π½Π΅ΠΉΠ½Π°Ρ‚Π° стойност. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ‰Π΅ бъдС нСвъзмоТно Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°, която ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° всичкитС си стойности, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π±Π΅Π·ΠΊΡ€Π°Π΅Π½ Π±Ρ€ΠΎΠΉ Ρ€Π΅Π΄ΠΎΠ²Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

employeesCount β€˜ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΡΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΎΠ² Ρ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ΠΎΠΉ > N’ (Department d, NUMERIC[10,2] N) = 
    GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;

Π’Π°Π·ΠΈ функция Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Π·Π° Π±Π΅Π·ΠΊΡ€Π°Π΅Π½ Π±Ρ€ΠΎΠΉ стойности Π½Π° N (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ всяка ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½Π° стойност Π΅ подходяща). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС ΠœΠΠ’Π•Π Π˜ΠΠ›Π˜Π—Π˜Π ΠΠΠž Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ. Π’Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ логичСско ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ тСхничСско (тоСст Π½Π΅ Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ…ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ). Π˜Π½Π°Ρ‡Π΅ няма ограничСния. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅, сортиранС, И ΠΈ Π˜Π›Π˜, PARTITION, рСкурсия ΠΈ Ρ‚.Π½.

НапримСр Π² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ 2.2 ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° статия ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС MATERIALIZED ΠΈ Π½Π° Π΄Π²Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

bought 'ΠšΡƒΠΏΠΈΠ»' (Customer c, Product p, INTEGER y) = 
    GROUP SUM sum(Detail d) IF 
        customer(order(d)) = c AND 
        product(d) = p AND 
        extractYear(date(order(d))) = y MATERIALIZED;
rating 'Π Π΅ΠΉΡ‚ΠΈΠ½Π³' (Customer c, Product p, INTEGER y) = 
    PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y MATERIALIZED;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;

Π‘Π°ΠΌΠ°Ρ‚Π° систСма Ρ‰Π΅ създадС Π΅Π΄Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° с Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ, ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈ Π˜ΠΠ’Π•Π“ΠͺΠ , Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈ Π΄Π²Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π° към Π½Π΅Π³ΠΎ ΠΈ Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° стойноститС Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° Π² тях с всички ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС правят Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ извиквания към Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π΅ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изчислСни, Π° ΠΏΠΎ-скоро стойноститС Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ ΠΎΡ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π°.

Използвайки Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅Ρ‚Π΅ ΠΎΡ‚ рСкурсиитС (CTE) Π² заявкитС. По-спСциално, помислСтС Π·Π° Π³Ρ€ΡƒΠΏΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π΄ΡŠΡ€Π²ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π΄Π΅Ρ‚Π΅/Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π» (всяка Π³Ρ€ΡƒΠΏΠ° ΠΈΠΌΠ° Π²Ρ€ΡŠΠ·ΠΊΠ° към своя Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»):

parent = DATA Group (Group);

Π’ΡŠΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° рСкурсия ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

level (Group child, Group parent) = RECURSION 1l IF child IS Group AND parent == child
                                                             STEP 2l IF parent == parent($parent);
isParent (Group child, Group parent) = TRUE IF level(child, parent) MATERIALIZED;

Въй ΠΊΠ°Ρ‚ΠΎ Π·Π° функцията Π΅Π ΠΎΠ΄ΠΈΡ‚Π΅Π» Π΅ отбСлязано ΠœΠΠ’Π•Π Π˜ΠΠ›Π˜Π—Π˜Π ΠΠ, Ρ‚ΠΎΠ³Π°Π²Π° Π·Π° Π½Π΅Π³ΠΎ Ρ‰Π΅ сС създадС Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° (Π³Ρ€ΡƒΠΏΠΈ), Π² която ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Π΅Π ΠΎΠ΄ΠΈΡ‚Π΅Π» Ρ‰Π΅ бъдС вярно само Π°ΠΊΠΎ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ»ΡŽΡ‡ Π΅ Π΄Π΅Ρ‚Π΅ Π½Π° втория. Броят Π½Π° записитС Π² Ρ‚Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‰Π΅ бъдС Ρ€Π°Π²Π΅Π½ Π½Π° броя Π½Π° Π³Ρ€ΡƒΠΏΠΈΡ‚Π΅, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ ΠΏΠΎ срСдната Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π° Π½Π° Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ. Ако трябва, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° ΠΏΡ€Π΅Π±Ρ€ΠΎΠΈΡ‚Π΅ броя Π½Π° ΠΏΠΎΡ‚ΠΎΠΌΡ†ΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π³Ρ€ΡƒΠΏΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ функция:

childrenCount (Group g) = GROUP SUM 1 IF isParent(Group child, g);

Няма Π΄Π° ΠΈΠΌΠ° CTE Π² SQL заявката. ВмСсто Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠΌΠ° просто GROUP BY.

Използвайки Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

CLASS Order 'Π—Π°ΠΊΠ°Π·';
date 'Π”Π°Ρ‚Π°' = DATA DATE (Order);

CLASS OrderDetail 'Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π·Π°ΠΊΠ°Π·Π°';
order 'Π—Π°ΠΊΠ°Π·' = DATA Order (OrderDetail);
date 'Π”Π°Ρ‚Π°' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;

ΠŸΡ€ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функция Π΄Π°Ρ‚Π° Π·Π° Ρ€Π΅Π΄Π° Π·Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°, ΠΏΠΎΠ»Π΅Ρ‚ΠΎ, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ° индСкс, Ρ‰Π΅ бъдС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΎ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с Ρ€Π΅Π΄ΠΎΠ²Π΅ Π·Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°Ρ‚Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, самата систСма Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ прСизчисли Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π°Ρ‚Π° Π΄Π°Ρ‚Π° Π² Ρ€Π΅Π΄Π°.

прСдимства

Π—Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ цСлият Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ? Π’ класичСскитС Π‘Π£Π‘Π”, Π±Π΅Π· прСнаписванС Π½Π° заявки, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΈΠ»ΠΈ DBA ΠΌΠΎΠ³Π°Ρ‚ само Π΄Π° промСнят индСкси, Π΄Π° опрСдСлят статистики ΠΈ Π΄Π° ΠΊΠ°Π·Π²Π°Ρ‚ Π½Π° планиращия заявки ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ изпълни (ΠΈ HINT са Π½Π°Π»ΠΈΡ‡Π½ΠΈ само Π² комСрсиални Π‘Π£Π‘Π”). ΠšΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚, няма Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π² статията Π² O (Π±Ρ€ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΠΈ) Π±Π΅Π· промяна Π½Π° заявки ΠΈΠ»ΠΈ добавянС Π½Π° Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΠΈ. Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° схСма Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° мислитС Π·Π° структурата Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅. Всичко Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ‚ΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°. Някои Ρ…ΠΎΡ€Π° Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ Π»ΠΎΠ³ΠΈΠΊΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ въз основа Π½Π° поставСната Π·Π°Π΄Π°Ρ‡Π°. Π’Π΅ Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΈ тяхната слоТност, Π½ΠΈΡ‚ΠΎ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° изпълнСниС, Π½ΠΈΡ‚ΠΎ Π²ΠΈΠ΄ΠΎΠ²Π΅ съСдинСния, Π½ΠΈΡ‚ΠΎ ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ Π΄Ρ€ΡƒΠ³ тСхничСски ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Π΅Π·ΠΈ Ρ…ΠΎΡ€Π° са ΠΏΠΎΠ²Π΅Ρ‡Π΅ бизнСс Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° всичко Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π² тСстванС ΠΈΠ»ΠΈ Сксплоатация. Позволява рСгистриранС Π½Π° Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΈ заявки. ΠšΠΎΠ³Π°Ρ‚ΠΎ бъдС ΠΎΡ‚ΠΊΡ€ΠΈΡ‚Π° дълга заявка, Ρ‚ΠΎΠ³Π°Π²Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ…ΠΎΡ€Π° (ΠΏΠΎ-тСхничСски - ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ DBA) Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚ MATERIALIZED Π½Π° някаква ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π° функция. Π’ΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ забавя записа (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ изисква Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ»Π΅ Π² транзакцията). Но Π½Π΅ само Ρ‚Π°Π·ΠΈ заявка сС ускорява Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ, Π½ΠΎ ΠΈ всички Π΄Ρ€ΡƒΠ³ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π°Π·ΠΈ функция. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ коя функция Π΄Π° сС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π΅ относитСлно лСсно. Π”Π²Π° основни ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°: броят Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΈ стойности (Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠΎΠ»ΠΊΠΎ записа Ρ‰Π΅ ΠΈΠΌΠ° Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°) ΠΈ ΠΊΠΎΠ»ΠΊΠΎ чСсто сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Π΄Ρ€ΡƒΠ³ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π°Π½Π°Π»ΠΎΠ·ΠΈ

Π‘ΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠΈ Π‘Π£Π‘Π” ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ: ΠœΠΠ’Π•Π Π˜ΠΠ›Π˜Π—Π˜Π ΠΠ Π˜Π—Π“Π›Π•Π” с Π‘ΠͺΠ Π—Πž ΠžΠ‘ΠΠžΠ’Π―Π’ΠΠΠ• (Oracle) ΠΈ Π˜ΠΠ”Π•ΠšΠ‘Π˜Π ΠΠ Π˜Π—Π“Π›Π•Π” (Microsoft SQL Server). Π’ PostgreSQL MATERIALIZED VIEW Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π² транзакция, Π° само ΠΏΡ€ΠΈ поискванС (ΠΈ Π΄ΠΎΡ€ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ строги ограничСния), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ Π³ΠΎ Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄. Но Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ няколко ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‚ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° ΠΈΠΌ.

ΠŸΡŠΡ€Π²ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ матСриализация само Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ стС създали ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ VIEW. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ останалитС заявки Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ новосъздадСния ΠΈΠ·Π³Π»Π΅Π΄, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ матСриализация. Или оставСтС всичко ΠΊΠ°ΠΊΡ‚ΠΎ Π΅, Π½ΠΎ Ρ‰Π΅ бъдС ΠΏΠΎΠ½Π΅ Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π²Π΅Ρ‡Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ изчислСни Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ заявки Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Π½ΠΎ Π³ΠΈ прСизчисляват.

Π’Ρ‚ΠΎΡ€ΠΎ, Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ Π±Ρ€ΠΎΠΉ ограничСния:

ΠžΡ€Π°ΠΊΡƒΠ»

5.3.8.4 ΠžΠ±Ρ‰ΠΈ ограничСния Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС

Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка Π½Π° матСриализирания ΠΈΠ·Π³Π»Π΅Π΄ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΈΠ·Π³Π»Π΅Π΄ Π½Π΅ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ към нСповтарящи сС ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΊΠ°Ρ‚ΠΎ SYSDATE намлява ROWNUM.
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΈΠ·Π³Π»Π΅Π΄ Π½Π΅ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ към RAW or LONG RAW Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° a SELECT подзаявка Π·Π° списък.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€. RANK) Π’ SELECT ΠΊΠ»Π°ΡƒΠ·Π°.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π½Π° която an XMLIndex ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° a MODEL ΠΊΠ»Π°ΡƒΠ·Π°.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° a HAVING ΠΊΠ»Π°ΡƒΠ·Π° с подзаявка.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π²Π»ΠΎΠΆΠ΅Π½ΠΈ заявки, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ANY, ALL ΠΈΠ»ΠΈ NOT EXISTS.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° a [START WITH …] CONNECT BY ΠΊΠ»Π°ΡƒΠ·Π°.
  • НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° мноТСство Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с подробности Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сайтовС.
  • ON COMMIT ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠΌΠ°Ρ‚ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с подробности.
  • Π’Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ съСдинСниС ΠΈΠ»ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚.
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΡΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с a GROUP BY ΠΊΠ»Π°ΡƒΠ·Π°Ρ‚Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π° ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎ индСкс Ρ‚Π°Π±Π»ΠΈΡ†Π°.

5.3.8.5 ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ само с обСдинСния

Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° заявки Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ само с обСдинСния ΠΈ Π±Π΅Π· Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ ΠΈΠΌΠ° слСднитС ограничСния Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС:

  • Всички ограничСния ΠΎΡ‚ Β«ΠžΠ±Ρ‰ΠΈ ограничСния Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС".
  • Π’Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠΌΠ°Ρ‚ GROUP BY ΠΊΠ»Π°ΡƒΠ·ΠΈ ΠΈΠ»ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ.
  • Π Π΅Π΄ΠΎΠ²Π΅ Π½Π° всички маси Π² FROM ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ трябва Π΄Π° сС появи Π² SELECT списък Π½Π° заявката.
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ трябва Π΄Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ с Ρ€Π΅Π΄ΠΎΠ²Π΅ Π·Π° всички Π±Π°Π·ΠΎΠ²ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² FROM списък Π½Π° заявката.
  • НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ обновяСм ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ ΠΎΡ‚ мноТСство Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с прости съСдинСния, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΊΠΎΠ»ΠΎΠ½Π° Ρ‚ΠΈΠΏ ΠΎΠ±Π΅ΠΊΡ‚ Π² SELECT изявлСниС.

ОсвСн Ρ‚ΠΎΠ²Π° избраният ΠΎΡ‚ вас ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° опрСсняванС няма Π΄Π° бъдС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½, Π°ΠΊΠΎ:

  • Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° външно съСдинСниС, ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π΄ΡŠΡ€ΠΆΠΈ ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ съСдинСниС. Ако Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ‚Π°ΠΊΠΎΠ²Π° съСдинСниС, обмислСтС прСнаписванСто Π½Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка, Π·Π° Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ съСдинСниС.
  • - SELECT ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π½Π° матСриализирания ΠΈΠ·Π³Π»Π΅Π΄ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΈΠ·Ρ€Π°Π·ΠΈ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΎΡ‚ мноТСство Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.

5.3.8.6 ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ

Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° заявки Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ ΠΈΠ»ΠΈ съСдинСния ΠΈΠΌΠ° слСднитС ограничСния Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС:

Π‘ΡŠΡ€Π·ΠΎΡ‚ΠΎ опрСсняванС сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈ Π·Π° Π΄Π²Π΅Ρ‚Π΅ ON COMMIT намлява ON DEMAND ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ, Π½ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ слСднитС ограничСния:

  • Всички Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² матСриализирания ΠΈΠ·Π³Π»Π΅Π΄ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ, Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ трябва:
    • Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ° всички ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, посочСна Π² матСриализирания ΠΈΠ·Π³Π»Π΅Π΄.
    • ΠŸΠΎΡΠΎΡ‡Π΅Ρ‚Π΅ с ROWID намлява INCLUDING NEW VALUES.
    • ΠŸΠΎΡΠΎΡ‡Π΅Ρ‚Π΅ SEQUENCE ΠΊΠ»Π°ΡƒΠ·Π°, Π°ΠΊΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π΄Π° ΠΈΠΌΠ° комбинация ΠΎΡ‚ вмъквания/Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ зарСТдания, изтривания ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

  • Π‘Π°ΠΌΠΎ SUM, COUNT, AVG, STDDEV, VARIANCE, MIN намлява MAX сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС.
  • COUNT(*) трябва Π΄Π° сС посочи.
  • АгрСгиранитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трябва Π΄Π° сС появяват само ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΉ-Π²ΡŠΠ½ΡˆΠ½Π°Ρ‚Π° част Π½Π° ΠΈΠ·Ρ€Π°Π·Π°. ВоСст Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ AVG(AVG(x)) or AVG(x)+ AVG(x) НС са ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ.
  • Π—Π° всСки Π°Π³Ρ€Π΅Π³Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ AVG(expr), ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ COUNT(expr) трябва Π΄Π° ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°. Oracle ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Ρ‚ΠΎΠ²Π° SUM(expr) бъдС посочСно.
  • If VARIANCE(expr) or STDDEV(expr) Π΅ посочСно, COUNT(expr) намлява SUM(expr) трябва Π΄Π° сС посочи. Oracle ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Ρ‚ΠΎΠ²Π° SUM(expr *expr) бъдС посочСно.
  • - SELECT ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° Π² Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС слоТСн ΠΈΠ·Ρ€Π°Π· с ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΎΡ‚ мноТСство Π±Π°Π·ΠΎΠ²ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π° Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²Π»ΠΎΠΆΠ΅Π½ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄.
  • - SELECT ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° всички GROUP BY ΠΊΠΎΠ»ΠΎΠ½ΠΈ.
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΈΠ·Π³Π»Π΅Π΄ Π½Π΅ сС основава Π½Π° Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.
  • Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ a CHAR Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ във Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π½Π° ΠΆΡƒΡ€Π½Π°Π» Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄, Π½Π°Π±ΠΎΡ€ΠΈΡ‚Π΅ ΠΎΡ‚ символи Π½Π° главния сайт ΠΈ матСриализирания ΠΈΠ·Π³Π»Π΅Π΄ трябва Π΄Π° са Π΅Π΄Π½Π°ΠΊΠ²ΠΈ.
  • Ако матСриализираният ΠΈΠ·Π³Π»Π΅Π΄ ΠΈΠΌΠ° Π΅Π΄Π½ΠΎ ΠΎΡ‚ слСднитС, Ρ‚ΠΎΠ³Π°Π²Π° Π±ΡŠΡ€Π·ΠΎΡ‚ΠΎ опрСсняванС сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° само ΠΏΡ€ΠΈ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ DML вмъквания ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ зарСТдания.
    • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ възглСди с MIN or MAX ΠΈΠ½Π΅Ρ€Ρ‚Π½ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ
    • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ възглСди, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ SUM(expr) Π½ΠΎ Π½Π΅ COUNT(expr)
    • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ възглСди Π±Π΅Π· COUNT(*)

    Вакъв ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ сС Π½Π°Ρ€ΠΈΡ‡Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ само Π·Π° вмъкванС.

  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ с MAX or MIN сС опрСснява Π±ΡŠΡ€Π·ΠΎ слСд ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ смСсСни DML ΠΈΠ·Ρ€Π°Π·ΠΈ, Π°ΠΊΠΎ няма a WHERE ΠΊΠ»Π°ΡƒΠ·Π°.
    Макс./ΠΌΠΈΠ½. Π±ΡŠΡ€Π·ΠΎ опрСсняванС слСд ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ смСсСн DML няма ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚ΠΎ случая само Π·Π° вмъкванС. Π’ΠΎΠΉ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° ΠΈ прСизчислява макс./ΠΌΠΈΠ½. стойности Π·Π° засСгнатитС Π³Ρ€ΡƒΠΏΠΈ. Врябва Π΄Π° стС наясно с Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ Π²ΡŠΡ€Ρ…Ρƒ СфСктивността.
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ ΠΈΠ»ΠΈ подзаявки Π² FROM ΠΊΠ»Π°ΡƒΠ·Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС опрСснява, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ напълно ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ. Π—Π° информация ΠΊΠΎΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ Ρ‰Π΅ сС слСят, Π²ΠΈΠΆΡ‚Π΅ Oracle Database SQL Π΅Π·ΠΈΠΊΠΎΠ² справочник.
  • Ако няма външни съСдинСния, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ сСлСкции ΠΈ съСдинСния Π² WHERE ΠΊΠ»Π°ΡƒΠ·Π°.
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с външни съСдинСния ΠΌΠΎΠ³Π°Ρ‚ Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС опрСсняват слСд ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»Π΅Π½ DML ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ зарСТдания, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ само Π²ΡŠΠ½ΡˆΠ½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΅ Π±ΠΈΠ»Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π°. ОсвСн Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ ограничСния Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅. Ако ΠΈΠΌΠ° външни съСдинСния, всички съСдинСния трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Ρ‡Ρ€Π΅Π· ANDs ΠΈ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° равСнството (=) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.
  • Π—Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ възглСди с CUBE, ROLLUP, Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ€ΠΈ ΠΈΠ»ΠΈ конкатСнация ΠΎΡ‚ тях, сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ слСднитС ограничСния:
    • - SELECT ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π» Π·Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ»ΠΈ a GROUPING_ID Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Ρ‚ Π½Π° всички GROUP BY ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈΠ»ΠΈ GROUPING Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π·Π° всСки GROUP BY изразяванС. НапримСр, Π°ΠΊΠΎ GROUP BY ΠΊΠ»Π°ΡƒΠ·Π°Ρ‚Π° Π½Π° матСриализирания ΠΈΠ·Π³Π»Π΅Π΄ Π΅ "GROUP BY CUBE(a, b)", Ρ‚ΠΎΠ³Π°Π²Π° SELECT ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΈΠ»ΠΈ "GROUPING_ID(a, b)" ΠΈΠ»ΠΈ "GROUPING(a) AND GROUPING(b)Β» Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС Π½Π° матСриализирания ΠΈΠ·Π³Π»Π΅Π΄.
    • GROUP BY Π½Π΅ трябва Π΄Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ Π³Ρ€ΡƒΠΏΠΈ. НапримСр, "GROUP BY a, ROLLUP(a, b)" Π½Π΅ сС опрСснява Π±ΡŠΡ€Π·ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ Π³Ρ€ΡƒΠΏΠΈ "(a), (a, b), AND (a)".

5.3.8.7 ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с UNION ALL

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ възглСди с UNION ALL Π·Π°Π΄Π°ΠΉΡ‚Π΅ опСраторска ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° REFRESH FAST опция, Π°ΠΊΠΎ са изпълнСни слСднитС условия:

  • Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка трябва Π΄Π° ΠΈΠΌΠ° UNION ALL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Π½Π°ΠΉ-високо Π½ΠΈΠ²ΠΎ.

    - UNION ALL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π²Π³Ρ€Π°Π΄Π΅Π½ Π² подзаявка, с Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: The UNION ALL ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π² подзаявка Π² FROM ΠΊΠ»Π°ΡƒΠ·Π°, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка Π΅ ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° SELECT * FROM (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈΠ»ΠΈ подзаявка с UNION ALL), ΠΊΠ°ΠΊΡ‚ΠΎ Π² слСдния ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    CREATE VIEW view_with_unionall AS (SELECT c.rowid crid, c.cust_id, 2 umarker FROM customers c WHERE c.cust_last_name = 'Smith' UNION ALL SELECT c.rowid crid, c.cust_id, 3 umarker FROM customers c WHERE c.cust_last_name = β€žΠ”ΠΆΠΎΡƒΠ½Ρβ€œ); Π‘ΠͺЗДАВАНЕ НА ΠœΠΠ’Π•Π Π˜ΠΠ›Π˜Π—Π˜Π ΠΠ Π˜Π—Π“Π›Π•Π” unionall_inside_view_mv ΠžΠ‘ΠΠžΠ’Π―Π’ΠΠΠ• Π‘ΠͺΠ Π—Πž ПРИ Π˜Π‘ΠšΠΠΠ• КАВО Π˜Π—Π‘Π•Π Π•Π’Π• * ОВ view_with_unionall;
    

    Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π³Π»Π΅Π΄ΠΊΠ°Ρ‚Π° view_with_unionall отговаря Π½Π° изискванията Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняванС.

  • ВсСки Π±Π»ΠΎΠΊ Π½Π° заявка Π² UNION ALL заявката трябва Π΄Π° отговаря Π½Π° изискванията Π·Π° Π±ΡŠΡ€Π·ΠΎ опрСсняващ сС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ с Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ ΠΈΠ»ΠΈ Π±ΡŠΡ€Π·ΠΎ опрСсняващ сС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ с обСдинСния.

    ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΡ‚Π΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ създадСни Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ сС изисква Π·Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Ρ‚ΠΈΠΏ Π±ΡŠΡ€Π·ΠΎ обновяСм ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄.
    ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π° Oracle ΡΡŠΡ‰ΠΎ позволява спСциалния случай Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ Π½Π° Π΅Π΄Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° с обСдинСния само ΠΏΡ€ΠΈ условиС ROWID ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² SELECT списък ΠΈ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π½Π° матСриализирания ΠΈΠ·Π³Π»Π΅Π΄. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰Π°Ρ‚Π° заявка Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° view_with_unionall.

  • - SELECT ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π½Π° всяка заявка трябва Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° a UNION ALL ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΈ UNION ALL ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° трябва Π΄Π° ΠΈΠΌΠ° ΠΎΡ‚Π΄Π΅Π»Π½Π° постоянна числова ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΎΠ²Π° стойност във всяка UNION ALL ΠΊΠ»ΠΎΠ½. ОсвСн Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° Π½Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° трябва Π΄Π° сС появи Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° ΠΏΠΎΡ€Π΅Π΄Π½Π° позиция Π² SELECT списък Π½Π° всСки Π±Π»ΠΎΠΊ Π½Π° заявка. Π’ΠΈΠΆΡ‚Π΅ "UNION ALL ΠœΠ°Ρ€ΠΊΠ΅Ρ€ ΠΈ прСнаписванС Π½Π° заявка» Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ информация относно UNION ALL ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ.
  • Някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ външни съСдинСния, заявки Π·Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ само Π·Π° вмъкванС ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ с UNION ALL. Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΎΠ±Π°Ρ‡Π΅, Ρ‡Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² рСпликацията, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ съСдинСния ΠΈΠ»ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π±ΡŠΡ€Π·ΠΎ опрСснСни, ΠΊΠΎΠ³Π°Ρ‚ΠΎ UNION ALL ΠΈΠ»ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ маси.
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ Π·Π° инициализация Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° трябва Π΄Π° бъдС Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° 9.2.0 ΠΈΠ»ΠΈ ΠΏΠΎ-висока, Π·Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ обновяСм ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ·Π³Π»Π΅Π΄ с UNION ALL.

НС искам Π΄Π° обидя Ρ„Π΅Π½ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Oracle, Π½ΠΎ съдСйки ΠΏΠΎ тСхния списък с ограничСния, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π΅ написан Π½Π΅ Π² общия случай, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ някакъв ΠΌΠΎΠ΄Π΅Π», Π° ΠΎΡ‚ хиляди ΠΈΠ½Π΄ΠΈΠΉΡ†ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π° всСки Π΅ Π΄Π°Π΄Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° написаха свой собствСн ΠΊΠ»ΠΎΠ½ ΠΈ всСки ΠΎΡ‚ тях Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΌΠΎΠΆΠ° ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈ. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° истинска Π»ΠΎΠ³ΠΈΠΊΠ° Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ…ΠΎΠ΄Π΅Π½Π΅ ΠΏΡ€Π΅Π· ΠΌΠΈΠ½Π½ΠΎ ΠΏΠΎΠ»Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠΈΠ½Π° ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠ°Ρ‚ΠΎ натиснСтС Π΅Π΄Π½ΠΎ ΠΎΡ‚ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈΡ‚Π΅ ограничСния. Как Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡΡŠΡ‰ΠΎ Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ, Π½ΠΎ Π΅ извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ статия.

Microsoft SQL Server

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ изисквания

Π’ допълнСниС към ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ SET ΠΈ изискванията Π·Π° дСтСрминистична функция трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изпълнСни слСднитС изисквания:

  • ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ изпълнява CREATE INDEX трябва Π΄Π° Π΅ собствСник Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π°.
  • ΠšΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ индСкса, IGNORE_DUP_KEY опцията трябва Π΄Π° бъдС Π·Π°Π΄Π°Π΄Π΅Π½Π° Π½Π° OFF (настройка ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅).
  • Π’Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ посочСни с ΠΈΠΌΠ΅Π½Π° ΠΎΡ‚ Π΄Π²Π΅ части, схСма.ΠΈΠΌΠ΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² дСфиницията Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π°.
  • Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΎΡ‚ потрСбитСля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, посочСни Π² ΠΈΠ·Π³Π»Π΅Π΄Π°, трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ създадСни с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° WITH SCHEMABINDING опция.
  • Всички Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ потрСбитСля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, посочСни Π² ΠΈΠ·Π³Π»Π΅Π΄Π°, трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ посочСни с ΠΈΠΌΠ΅Π½Π° ΠΎΡ‚ Π΄Π²Π΅ части, ..
  • Бвойството Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° ΠΎΡ‚ потрСбитСля функция трябва Π΄Π° бъдС NO SQLΠΈ свойството Π·Π° външСн Π΄ΠΎΡΡ‚ΡŠΠΏ трябва Π΄Π° бъдС NO.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° Common Language Runtime (CLR) ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π² списъка Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π°, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ част ΠΎΡ‚ дСфиницията Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈΡ индСкс. CLR Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π² ΠΊΠ»Π°ΡƒΠ·Π°Ρ‚Π° WHERE Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡƒΠ·Π°Ρ‚Π° ON Π½Π° JOIN опСрация Π² ΠΈΠ·Π³Π»Π΅Π΄Π°.
  • CLR Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° CLR потрСбитСлски Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² дСфиницията Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π°, трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ свойства, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² слСдващата Ρ‚Π°Π±Π»ΠΈΡ†Π°.

    Π˜ΠΌΠΎΡ‚
    Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°

    Π”Π•Π’Π•Π ΠœΠ˜ΠΠ˜Π‘Π’Π˜Π§ΠΠž = Π’Π―Π ΠΠž
    Врябва Π΄Π° сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π° ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° Microsoft .NET Framework.

    ВОЧНО = ИБВИНБКО
    Врябва Π΄Π° сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π° ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° .NET Framework.

    Π”ΠžΠ‘Π’ΠͺП Π”ΠΠΠΠ˜ = Π‘Π•Π— SQL
    ΠžΠΏΡ€Π΅Π΄Π΅Π»Ρ сС Ρ‡Ρ€Π΅Π· Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° DataAccess Π½Π° DataAccessKind.None ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° SystemDataAccess Π½Π° SystemDataAccessKind.None.

    Π’ΠͺНШЕН Π”ΠžΠ‘Π’ΠͺП = НЕ
    Π’ΠΎΠ²Π° свойство ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ НЕ Π·Π° CLR Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ.

  • Π˜Π·Π³Π»Π΅Π΄ΡŠΡ‚ трябва Π΄Π° бъдС създадСн с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° WITH SCHEMABINDING опция.
  • Π˜Π·Π³Π»Π΅Π΄ΡŠΡ‚ трябва Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° само към Π±Π°Π·ΠΎΠ²ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π² ΡΡŠΡ‰Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π°. Π˜Π·Π³Π»Π΅Π΄ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ.
  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ SELECT Π² дСфиницията Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π½Π΅ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° слСднитС Transact-SQL Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ:

    COUNT
    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, И OPENXML)
    OUTER сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΠ²Π° (LEFT, RIGHT ΠΈΠ»ΠΈ FULL)

    ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° (Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° a SELECT изявлСниС Π² FROM ΠΊΠ»Π°ΡƒΠ·Π°)
    БамосъСдинява сС
    Π—Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP ΠΈΠ»ΠΈ AVG
    ΠžΠ±Ρ‰ Ρ‚Π°Π±Π»ΠΈΡ‡Π΅Π½ ΠΈΠ·Ρ€Π°Π· (CTE)

    поплавък1, тСкст, ntext, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, XML ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΠ»ΠΎΠ½ΠΈ
    Подзаявка
    OVER ΠΊΠ»Π°ΡƒΠ·Π°, която Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° класиранС ΠΈΠ»ΠΈ сборСн ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†

    ΠŸΡŠΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΈ (CONTAINS, FREETEXT)
    SUM функция, която ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към nullable ΠΈΠ·Ρ€Π°Π·
    ORDER BY

    CLR Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° ΠΎΡ‚ потрСбитСля Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Π° функция
    TOP
    CUBE, ROLLUP ΠΈΠ»ΠΈ GROUPING SETS ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ

    MIN, MAX
    UNION, EXCEPT ΠΈΠ»ΠΈ INTERSECT ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ
    TABLESAMPLE

    Π’Π°Π±Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    Π Π°Π·Ρ€Π΅Π΄Π΅Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΊΠΎΠ»ΠΎΠ½ΠΈ
    Π’Π³Ρ€Π°Π΄Π΅Π½ΠΈ (TVF) ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΈ стойности с мноТСство ΠΈΠ·Ρ€Π°Π·ΠΈ (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΈΠ·Π³Π»Π΅Π΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° поплавък ΠΊΠΎΠ»ΠΎΠ½ΠΈ; ΠΎΠ±Π°Ρ‡Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ΠΊΠ»ΡŽΡ‡Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈΡ индСкс.

  • If GROUP BY ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°, дСфиницията Π½Π° VIEW трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° COUNT_BIG(*) ΠΈ Π½Π΅ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° HAVING, Ρ‚Π΅Π·ΠΈ GROUP BY ограничСнията са ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ само към дСфиницията Π½Π° индСксиран ΠΈΠ·Π³Π»Π΅Π΄. Π•Π΄Π½Π° заявка ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° индСксиран ΠΈΠ·Π³Π»Π΅Π΄ Π² своя ΠΏΠ»Π°Π½ Π·Π° изпълнСниС, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Π½Π΅ отговаря Π½Π° Ρ‚Π΅Π·ΠΈ GROUP BY ограничСния.
  • Ако дСфиницията Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° a GROUP BY ΠΊΠ»Π°ΡƒΠ·Π°, ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π½Π° уникалния ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π΅Π½ индСкс ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° само към ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅, посочСни Π² GROUP BY ΠΊΠ»Π°ΡƒΠ·Π°.

Π’ΡƒΠΊ Π΅ ясно, Ρ‡Π΅ ΠΈΠ½Π΄ΠΈΠ°Π½Ρ†ΠΈΡ‚Π΅ Π½Π΅ са Π±ΠΈΠ»ΠΈ замСсСни, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ са Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ направят ΠΏΠΎ схСмата β€žΡ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ, Π½ΠΎ Π΄ΠΎΠ±Ρ€Π΅β€œ. ВоСст ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΌΠΈΠ½ΠΈ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ, Π½ΠΎ мСстополоТСниСто ΠΈΠΌ Π΅ ΠΏΠΎ-ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ. Най-Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ Ρ‚ΠΎΠ²Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅:

Π˜Π·Π³Π»Π΅Π΄ΡŠΡ‚ трябва Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° само към Π±Π°Π·ΠΎΠ²ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π² ΡΡŠΡ‰Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π°. Π˜Π·Π³Π»Π΅Π΄ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ.

Π’ Π½Π°ΡˆΠ°Ρ‚Π° тСрминология Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π΅Π΄Π½Π° функция няма Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΄Ρ€ΡƒΠ³Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° функция. Π’ΠΎΠ²Π° ΡΡŠΠΊΡ€Π°Ρ‰Π°Π²Π° всяка идСология Π² Π·Π°Ρ€ΠΎΠ΄ΠΈΡˆ.
Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Ρ‚ΠΎΠ²Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ (ΠΈ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Π² тСкста) Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ намалява случаитС Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ SELECT Π² дСфиницията Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π½Π΅ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° слСднитС Transact-SQL Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ:

COUNT
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, И OPENXML)
OUTER сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΠ²Π° (LEFT, RIGHT ΠΈΠ»ΠΈ FULL)

ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° (Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° a SELECT изявлСниС Π² FROM ΠΊΠ»Π°ΡƒΠ·Π°)
БамосъСдинява сС
Π—Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP ΠΈΠ»ΠΈ AVG
ΠžΠ±Ρ‰ Ρ‚Π°Π±Π»ΠΈΡ‡Π΅Π½ ΠΈΠ·Ρ€Π°Π· (CTE)

поплавък1, тСкст, ntext, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, XML ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΠ»ΠΎΠ½ΠΈ
Подзаявка
OVER ΠΊΠ»Π°ΡƒΠ·Π°, която Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° класиранС ΠΈΠ»ΠΈ сборСн ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†

ΠŸΡŠΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΈ (CONTAINS, FREETEXT)
SUM функция, която ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към nullable ΠΈΠ·Ρ€Π°Π·
ORDER BY

CLR Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° ΠΎΡ‚ потрСбитСля Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Π° функция
TOP
CUBE, ROLLUP ΠΈΠ»ΠΈ GROUPING SETS ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ

MIN, MAX
UNION, EXCEPT ΠΈΠ»ΠΈ INTERSECT ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ
TABLESAMPLE

Π’Π°Π±Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

Π Π°Π·Ρ€Π΅Π΄Π΅Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΊΠΎΠ»ΠΎΠ½ΠΈ
Π’Π³Ρ€Π°Π΄Π΅Π½ΠΈ (TVF) ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΈ стойности с мноТСство ΠΈΠ·Ρ€Π°Π·ΠΈ (MSTVF)
OFFSET

CHECKSUM_AGG

OUTER JOINS, UNION, ORDER BY ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ са Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΈ. МоТС Π±ΠΈ Π΅ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-лСсно Π΄Π° сС посочи ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π‘ΠΏΠΈΡΡŠΠΊΡŠΡ‚ вСроятно Ρ‰Π΅ бъдС ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-малък.

Π—Π° Π΄Π° ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΠΌ: ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ограничСния във всяка (Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈΠΌ комСрсиална) Π‘Π£Π‘Π” срСщу Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½ΠΎ (с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½ΠΎ логичСско, Π½Π΅ тСхничСско) Π² тСхнологията LGPL. ВсС ΠΏΠ°ΠΊ трябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² описаната Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°.

ИзпълнСниС

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ? PostgreSQL сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ β€žΠ²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°β€œ. Π’ΡŠΡ‚Ρ€Π΅ ΠΈΠΌΠ° слоТСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° заявки. Π’ΡƒΠΊ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ. И няма просто голям Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Свристики с ΠΊΡƒΠΏ Π°ΠΊΠΎ. Π’Π°ΠΊΠ° Ρ‡Π΅, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ няколко мСсСца Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°.

Π Π°Π±ΠΎΡ‚ΠΈ Π»ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ? Доста Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π—Π° съТалСниС Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄ΠΎΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎ. Мога само Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Π°ΠΊΠΎ Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ хилядитС заявки, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ прилоТСния, Ρ‚ΠΎΠ³Π°Π²Π° срСдно Ρ‚Π΅ са ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π½Π° Π΄ΠΎΠ±ΡŠΡ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. Π•Π΄ΠΈΠ½ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ SQL програмист ΠΌΠΎΠΆΠ΅ Π΄Π° напишС всяка заявка ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Π½ΠΎ с хиляди заявки Ρ‚ΠΎΠΉ просто няма Π΄Π° ΠΈΠΌΠ° мотивация ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ. ЕдинствСното Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ сСга ΠΌΠΎΠ³Π° Π΄Π° Ρ†ΠΈΡ‚ΠΈΡ€Π°ΠΌ ΠΊΠ°Ρ‚ΠΎ доказатСлство Π·Π° СфСктивност Π΅, Ρ‡Π΅ няколко ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° работят Π²ΡŠΡ€Ρ…Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Π°Π·ΠΈ Π‘Π£Π‘Π” ERP систСми, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ хиляди Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠœΠΠ’Π•Π Π˜ΠΠ›Π˜Π—Π˜Π ΠΠΠ˜ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с хиляди ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ със стотици ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ записи, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ двупроцСсорСн ΡΡŠΡ€Π²ΡŠΡ€. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, всСки ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ/ΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€Π³Π°Π΅ СфСктивността, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈ PostgreSQL, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ рСгистриранС Π½Π° SQL заявки ΠΈ ΠΎΠΏΠΈΡ‚ Π·Π° промяна Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΌ.

Π’ слСдващитС статии Ρ‰Π΅ говоря ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ограничСния Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ със сСсии Π·Π° промяна ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€