ಬ್ಯಾಲೆನ್ಸಿಂಗ್ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಬರೆಯುತ್ತದೆ ಮತ್ತು ಓದುತ್ತದೆ

ಬ್ಯಾಲೆನ್ಸಿಂಗ್ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಬರೆಯುತ್ತದೆ ಮತ್ತು ಓದುತ್ತದೆ
ಹಿಂದಿನದರಲ್ಲಿ ಲೇಖನ ಸಂಬಂಧಿತ ಡೇಟಾಬೇಸ್‌ಗಳಲ್ಲಿರುವಂತೆ ಕೋಷ್ಟಕಗಳು ಮತ್ತು ಕ್ಷೇತ್ರಗಳಿಗಿಂತ ಕಾರ್ಯಗಳ ಆಧಾರದ ಮೇಲೆ ನಿರ್ಮಿಸಲಾದ ಡೇಟಾಬೇಸ್‌ನ ಪರಿಕಲ್ಪನೆ ಮತ್ತು ಅನುಷ್ಠಾನವನ್ನು ನಾನು ವಿವರಿಸಿದೆ. ಶಾಸ್ತ್ರೀಯ ವಿಧಾನಕ್ಕಿಂತ ಈ ವಿಧಾನದ ಪ್ರಯೋಜನಗಳನ್ನು ತೋರಿಸುವ ಅನೇಕ ಉದಾಹರಣೆಗಳನ್ನು ಇದು ಒದಗಿಸಿದೆ. ಅವರು ಸಾಕಷ್ಟು ಮನವರಿಕೆಯಾಗುವುದಿಲ್ಲ ಎಂದು ಹಲವರು ಕಂಡುಕೊಂಡರು.

ಈ ಲೇಖನದಲ್ಲಿ, ಆಪರೇಟಿಂಗ್ ಲಾಜಿಕ್‌ನಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆಯಿಲ್ಲದೆ ಡೇಟಾಬೇಸ್‌ಗೆ ಬರೆಯುವ ಮತ್ತು ಓದುವಿಕೆಯನ್ನು ತ್ವರಿತವಾಗಿ ಮತ್ತು ಅನುಕೂಲಕರವಾಗಿ ಸಮತೋಲನಗೊಳಿಸಲು ಈ ಪರಿಕಲ್ಪನೆಯು ನಿಮಗೆ ಹೇಗೆ ಅನುಮತಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಾನು ತೋರಿಸುತ್ತೇನೆ. ಆಧುನಿಕ ವಾಣಿಜ್ಯ DBMS ಗಳಲ್ಲಿ (ನಿರ್ದಿಷ್ಟವಾಗಿ, Oracle ಮತ್ತು Microsoft SQL ಸರ್ವರ್) ಇದೇ ರೀತಿಯ ಕಾರ್ಯವನ್ನು ಅಳವಡಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗಿದೆ. ಲೇಖನದ ಕೊನೆಯಲ್ಲಿ ಅವರು ಏನು ಮಾಡಿದರು, ಅದನ್ನು ಸ್ವಲ್ಪಮಟ್ಟಿಗೆ ಹೇಳುವುದಾದರೆ, ಅದು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲಿಲ್ಲ ಎಂದು ನಾನು ತೋರಿಸುತ್ತೇನೆ.

ವಿವರಣೆ

ಮೊದಲಿನಂತೆ, ಉತ್ತಮ ತಿಳುವಳಿಕೆಗಾಗಿ ನಾನು ಉದಾಹರಣೆಗಳೊಂದಿಗೆ ವಿವರಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇನೆ. ನಾವು ತರ್ಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾಗಿದೆ ಎಂದು ಹೇಳೋಣ, ಅದು ಇಲಾಖೆಗಳ ಪಟ್ಟಿಯನ್ನು ಅವರಲ್ಲಿರುವ ಉದ್ಯೋಗಿಗಳ ಸಂಖ್ಯೆ ಮತ್ತು ಅವರ ಒಟ್ಟು ಸಂಬಳದೊಂದಿಗೆ ಹಿಂತಿರುಗಿಸುತ್ತದೆ.

ಕ್ರಿಯಾತ್ಮಕ ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಇದು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

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);

ಯಾವುದೇ DBMS ನಲ್ಲಿ ಈ ಪ್ರಶ್ನೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಂಕೀರ್ಣತೆಯು ಇದಕ್ಕೆ ಸಮನಾಗಿರುತ್ತದೆ O (ಉದ್ಯೋಗಿಗಳ ಸಂಖ್ಯೆ)ಏಕೆಂದರೆ ಈ ಲೆಕ್ಕಾಚಾರವು ಉದ್ಯೋಗಿಗಳ ಸಂಪೂರ್ಣ ಟೇಬಲ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ ಮತ್ತು ನಂತರ ಅವರನ್ನು ಇಲಾಖೆಯ ಪ್ರಕಾರ ಗುಂಪು ಮಾಡುವುದು. ಆಯ್ದ ಯೋಜನೆಯನ್ನು ಅವಲಂಬಿಸಿ ಕೆಲವು ಸಣ್ಣ (ಇಲಾಖೆಗಳಿಗಿಂತ ಹೆಚ್ಚಿನ ಉದ್ಯೋಗಿಗಳು ಇದ್ದಾರೆ ಎಂದು ನಾವು ನಂಬುತ್ತೇವೆ) ಪೂರಕವೂ ಇರುತ್ತದೆ O (ಉದ್ಯೋಗಿಗಳ ಲಾಗ್ ಸಂಖ್ಯೆ) ಅಥವಾ O(ಇಲಾಖೆಗಳ ಸಂಖ್ಯೆ) ಗುಂಪುಗಾರಿಕೆಗಾಗಿ ಮತ್ತು ಹೀಗೆ.

ವಿಭಿನ್ನ DBMS ಗಳಲ್ಲಿ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಓವರ್ಹೆಡ್ ವಿಭಿನ್ನವಾಗಿರಬಹುದು ಎಂಬುದು ಸ್ಪಷ್ಟವಾಗಿದೆ, ಆದರೆ ಸಂಕೀರ್ಣತೆಯು ಯಾವುದೇ ರೀತಿಯಲ್ಲಿ ಬದಲಾಗುವುದಿಲ್ಲ.

ಪ್ರಸ್ತಾವಿತ ಅನುಷ್ಠಾನದಲ್ಲಿ, ಕ್ರಿಯಾತ್ಮಕ DBMS ಒಂದು ಉಪಪ್ರಶ್ನೆಯನ್ನು ರಚಿಸುತ್ತದೆ ಅದು ಇಲಾಖೆಗೆ ಅಗತ್ಯವಿರುವ ಮೌಲ್ಯಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಹೆಸರನ್ನು ಪಡೆಯಲು ಇಲಾಖೆಯ ಕೋಷ್ಟಕದೊಂದಿಗೆ ಸೇರಿಕೊಳ್ಳಿ. ಆದಾಗ್ಯೂ, ಪ್ರತಿ ಕಾರ್ಯಕ್ಕಾಗಿ, ಘೋಷಿಸುವಾಗ, ವಿಶೇಷ ಮೆಟೀರಿಯಲೈಸ್ಡ್ ಮಾರ್ಕರ್ ಅನ್ನು ಹೊಂದಿಸಲು ಸಾಧ್ಯವಿದೆ. ಅಂತಹ ಪ್ರತಿಯೊಂದು ಕಾರ್ಯಕ್ಕಾಗಿ ಸಿಸ್ಟಮ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅನುಗುಣವಾದ ಕ್ಷೇತ್ರವನ್ನು ರಚಿಸುತ್ತದೆ. ಕಾರ್ಯದ ಮೌಲ್ಯವನ್ನು ಬದಲಾಯಿಸುವಾಗ, ಅದೇ ವಹಿವಾಟಿನಲ್ಲಿ ಕ್ಷೇತ್ರದ ಮೌಲ್ಯವೂ ಬದಲಾಗುತ್ತದೆ. ಈ ಕಾರ್ಯವನ್ನು ಪ್ರವೇಶಿಸುವಾಗ, ಪೂರ್ವ-ಲೆಕ್ಕಾಚಾರದ ಕ್ಷೇತ್ರವನ್ನು ಪ್ರವೇಶಿಸಲಾಗುತ್ತದೆ.

ನಿರ್ದಿಷ್ಟವಾಗಿ, ನೀವು ಕಾರ್ಯಗಳಿಗಾಗಿ MATERIALIZED ಅನ್ನು ಹೊಂದಿಸಿದರೆ ಕೌಂಟ್ ಉದ್ಯೋಗಿಗಳು и ಸಂಬಳದ ಮೊತ್ತ, ನಂತರ ಎರಡು ಕ್ಷೇತ್ರಗಳನ್ನು ಇಲಾಖೆಗಳ ಪಟ್ಟಿಯೊಂದಿಗೆ ಟೇಬಲ್ಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ, ಇದು ನೌಕರರ ಸಂಖ್ಯೆ ಮತ್ತು ಅವರ ಒಟ್ಟು ಸಂಬಳವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ನೌಕರರು, ಅವರ ಸಂಬಳ ಅಥವಾ ಇಲಾಖೆಯ ಸಂಬಂಧಗಳಲ್ಲಿ ಬದಲಾವಣೆಯಾದಾಗ, ವ್ಯವಸ್ಥೆಯು ಈ ಕ್ಷೇತ್ರಗಳ ಮೌಲ್ಯಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ. ಮೇಲಿನ ಪ್ರಶ್ನೆಯು ಈ ಕ್ಷೇತ್ರಗಳನ್ನು ನೇರವಾಗಿ ಪ್ರವೇಶಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ O(ಇಲಾಖೆಗಳ ಸಂಖ್ಯೆ).

ನಿರ್ಬಂಧಗಳೇನು? ಒಂದೇ ಒಂದು ವಿಷಯ: ಅಂತಹ ಕಾರ್ಯವು ಅದರ ಮೌಲ್ಯವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಇನ್ಪುಟ್ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿರಬೇಕು. ಇಲ್ಲದಿದ್ದರೆ, ಅದರ ಎಲ್ಲಾ ಮೌಲ್ಯಗಳನ್ನು ಸಂಗ್ರಹಿಸುವ ಟೇಬಲ್ ಅನ್ನು ನಿರ್ಮಿಸಲು ಅಸಾಧ್ಯವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಅನಂತ ಸಂಖ್ಯೆಯ ಸಾಲುಗಳೊಂದಿಗೆ ಟೇಬಲ್ ಇರುವಂತಿಲ್ಲ.

ಉದಾಹರಣೆ:

employeesCount ‘Количество сотрудников с зарплатой > N’ (Department d, NUMERIC[10,2] N) = 
    GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;

ಈ ಕಾರ್ಯವನ್ನು N ನ ಅನಂತ ಸಂಖ್ಯೆಯ ಮೌಲ್ಯಗಳಿಗೆ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ (ಉದಾಹರಣೆಗೆ, ಯಾವುದೇ ನಕಾರಾತ್ಮಕ ಮೌಲ್ಯವು ಸೂಕ್ತವಾಗಿದೆ). ಆದ್ದರಿಂದ, ನೀವು ಅದರ ಮೇಲೆ MATERILIZED ಹಾಕಲು ಸಾಧ್ಯವಿಲ್ಲ. ಆದ್ದರಿಂದ ಇದು ತಾರ್ಕಿಕ ಮಿತಿಯಾಗಿದೆ, ತಾಂತ್ರಿಕವಲ್ಲ (ಅಂದರೆ, ನಾವು ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗದ ಕಾರಣವಲ್ಲ). ಇಲ್ಲದಿದ್ದರೆ, ಯಾವುದೇ ನಿರ್ಬಂಧಗಳಿಲ್ಲ. ನೀವು ಗುಂಪುಗಳು, ವಿಂಗಡಣೆ, ಮತ್ತು ಮತ್ತು ಅಥವಾ, ವಿಭಜನೆ, ಪುನರಾವರ್ತನೆ, ಇತ್ಯಾದಿಗಳನ್ನು ಬಳಸಬಹುದು.

ಉದಾಹರಣೆಗೆ, ಹಿಂದಿನ ಲೇಖನದ ಸಮಸ್ಯೆ 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;

ಕಾರ್ಯಕ್ಕಾಗಿ ರಿಂದ ಪೋಷಕ MATERILIZED ಎಂದು ಗುರುತಿಸಲಾಗಿದೆ, ನಂತರ ಎರಡು ಕೀಲಿಗಳನ್ನು (ಗುಂಪುಗಳು) ಹೊಂದಿರುವ ಟೇಬಲ್ ಅನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ, ಅದರಲ್ಲಿ ಕ್ಷೇತ್ರ ಪೋಷಕ ಮೊದಲನೆಯ ಕೀಲಿಯು ಎರಡನೆಯ ಮಗುವಾಗಿದ್ದರೆ ಮಾತ್ರ ನಿಜವಾಗುತ್ತದೆ. ಈ ಕೋಷ್ಟಕದಲ್ಲಿನ ನಮೂದುಗಳ ಸಂಖ್ಯೆಯು ಮರದ ಸರಾಸರಿ ಆಳದಿಂದ ಗುಣಿಸಿದ ಗುಂಪುಗಳ ಸಂಖ್ಯೆಗೆ ಸಮನಾಗಿರುತ್ತದೆ. ನಿಮಗೆ ಅಗತ್ಯವಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ, ನಿರ್ದಿಷ್ಟ ಗುಂಪಿನ ವಂಶಸ್ಥರ ಸಂಖ್ಯೆಯನ್ನು ಎಣಿಸಲು, ನೀವು ಈ ಕಾರ್ಯವನ್ನು ಬಳಸಬಹುದು:

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

SQL ಪ್ರಶ್ನೆಯಲ್ಲಿ ಯಾವುದೇ CTE ಇರುವುದಿಲ್ಲ. ಬದಲಿಗೆ ಸರಳ GROUP BY ಇರುತ್ತದೆ.

ಈ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು, ಅಗತ್ಯವಿದ್ದರೆ ನೀವು ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಅಮಾನ್ಯಗೊಳಿಸಬಹುದು:

CLASS Order 'Заказ';
date 'Дата' = DATA DATE (Order);

CLASS OrderDetail 'Строка заказа';
order 'Заказ' = DATA Order (OrderDetail);
date 'Дата' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;

ಕಾರ್ಯವನ್ನು ಕರೆಯುವಾಗ ದಿನಾಂಕ ಆರ್ಡರ್ ಲೈನ್‌ಗಾಗಿ, ಸೂಚ್ಯಂಕ ಇರುವ ಕ್ಷೇತ್ರವನ್ನು ಆರ್ಡರ್ ಲೈನ್‌ಗಳೊಂದಿಗೆ ಟೇಬಲ್‌ನಿಂದ ಓದಲಾಗುತ್ತದೆ. ಆದೇಶದ ದಿನಾಂಕ ಬದಲಾದಾಗ, ವ್ಯವಸ್ಥೆಯು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಾಲಿನಲ್ಲಿ ಅಸಾಧಾರಣ ದಿನಾಂಕವನ್ನು ಮರು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ.

ಪ್ರಯೋಜನಗಳು

ಈ ಸಂಪೂರ್ಣ ಕಾರ್ಯವಿಧಾನ ಯಾವುದು? ಕ್ಲಾಸಿಕ್ ಡಿಬಿಎಂಎಸ್‌ಗಳಲ್ಲಿ, ಪ್ರಶ್ನೆಗಳನ್ನು ಪುನಃ ಬರೆಯದೆಯೇ, ಡೆವಲಪರ್ ಅಥವಾ ಡಿಬಿಎ ಸೂಚ್ಯಂಕಗಳನ್ನು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು, ಅಂಕಿಅಂಶಗಳನ್ನು ನಿರ್ಧರಿಸಬಹುದು ಮತ್ತು ಅವುಗಳನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕು ಎಂದು ಪ್ರಶ್ನೆ ಯೋಜಕರಿಗೆ ಹೇಳಬಹುದು (ಮತ್ತು ಸುಳಿವುಗಳು ವಾಣಿಜ್ಯ ಡಿಬಿಎಂಎಸ್‌ಗಳಲ್ಲಿ ಮಾತ್ರ ಲಭ್ಯವಿರುತ್ತವೆ). ಅವರು ಎಷ್ಟೇ ಪ್ರಯತ್ನಿಸಿದರೂ, ಲೇಖನದಲ್ಲಿನ ಮೊದಲ ಪ್ರಶ್ನೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅವರಿಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ O (ಇಲಾಖೆಗಳ ಸಂಖ್ಯೆ) ಪ್ರಶ್ನೆಗಳನ್ನು ಬದಲಾಯಿಸದೆ ಅಥವಾ ಟ್ರಿಗ್ಗರ್‌ಗಳನ್ನು ಸೇರಿಸದೆ. ಪ್ರಸ್ತಾವಿತ ಯೋಜನೆಯಲ್ಲಿ, ಅಭಿವೃದ್ಧಿ ಹಂತದಲ್ಲಿ ನೀವು ಡೇಟಾ ಸಂಗ್ರಹಣೆ ರಚನೆ ಮತ್ತು ಯಾವ ಒಟ್ಟುಗೂಡಿಸುವಿಕೆಯನ್ನು ಬಳಸಬೇಕೆಂದು ಯೋಚಿಸಬೇಕಾಗಿಲ್ಲ. ಈ ಎಲ್ಲಾ ಸುಲಭವಾಗಿ ಹಾರಾಡುವ ಬದಲಾಯಿಸಬಹುದು, ನೇರವಾಗಿ ಕಾರ್ಯಾಚರಣೆಯಲ್ಲಿ.

ಪ್ರಾಯೋಗಿಕವಾಗಿ ಇದು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ. ಕೆಲವು ಜನರು ಕೈಯಲ್ಲಿರುವ ಕೆಲಸವನ್ನು ಆಧರಿಸಿ ನೇರವಾಗಿ ತರ್ಕವನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತಾರೆ. ಅವರು ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಮತ್ತು ಅವುಗಳ ಸಂಕೀರ್ಣತೆ, ಅಥವಾ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಯೋಜನೆಗಳು, ಅಥವಾ ಸೇರ್ಪಡೆಗಳ ಪ್ರಕಾರಗಳು ಅಥವಾ ಯಾವುದೇ ಇತರ ತಾಂತ್ರಿಕ ಘಟಕಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದಿಲ್ಲ. ಈ ಜನರು ಡೆವಲಪರ್‌ಗಳಿಗಿಂತ ಹೆಚ್ಚು ವ್ಯಾಪಾರ ವಿಶ್ಲೇಷಕರು. ನಂತರ, ಇದೆಲ್ಲವೂ ಪರೀಕ್ಷೆ ಅಥವಾ ಕಾರ್ಯಾಚರಣೆಗೆ ಹೋಗುತ್ತದೆ. ದೀರ್ಘಾವಧಿಯ ಪ್ರಶ್ನೆಗಳ ಲಾಗಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ದೀರ್ಘವಾದ ಪ್ರಶ್ನೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಿದಾಗ, ಇತರ ಜನರು (ಹೆಚ್ಚು ತಾಂತ್ರಿಕ - ಮೂಲಭೂತವಾಗಿ DBA) ಕೆಲವು ಮಧ್ಯಂತರ ಕಾರ್ಯದಲ್ಲಿ MATERIALIZED ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿರ್ಧರಿಸುತ್ತಾರೆ. ಇದು ರೆಕಾರ್ಡಿಂಗ್ ಅನ್ನು ಸ್ವಲ್ಪಮಟ್ಟಿಗೆ ನಿಧಾನಗೊಳಿಸುತ್ತದೆ (ಇದು ವಹಿವಾಟಿನಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಕ್ಷೇತ್ರವನ್ನು ನವೀಕರಿಸುವ ಅಗತ್ಯವಿರುವುದರಿಂದ). ಆದಾಗ್ಯೂ, ಈ ಪ್ರಶ್ನೆಯನ್ನು ಗಮನಾರ್ಹವಾಗಿ ವೇಗಗೊಳಿಸುವುದು ಮಾತ್ರವಲ್ಲ, ಈ ಕಾರ್ಯವನ್ನು ಬಳಸುವ ಎಲ್ಲಾ ಇತರರೂ ಸಹ. ಅದೇ ಸಮಯದಲ್ಲಿ, ಯಾವ ಕಾರ್ಯವನ್ನು ಕಾರ್ಯರೂಪಕ್ಕೆ ತರಬೇಕೆಂದು ನಿರ್ಧರಿಸುವುದು ತುಲನಾತ್ಮಕವಾಗಿ ಸುಲಭ. ಎರಡು ಮುಖ್ಯ ನಿಯತಾಂಕಗಳು: ಸಂಭವನೀಯ ಇನ್ಪುಟ್ ಮೌಲ್ಯಗಳ ಸಂಖ್ಯೆ (ಅನುಗುಣವಾದ ಕೋಷ್ಟಕದಲ್ಲಿ ಎಷ್ಟು ದಾಖಲೆಗಳು ಇರುತ್ತವೆ), ಮತ್ತು ಇತರ ಕಾರ್ಯಗಳಲ್ಲಿ ಇದನ್ನು ಎಷ್ಟು ಬಾರಿ ಬಳಸಲಾಗುತ್ತದೆ.

ಅನಲಾಗ್ಗಳು

ಆಧುನಿಕ ವಾಣಿಜ್ಯ DBMS ಗಳು ಇದೇ ರೀತಿಯ ಕಾರ್ಯವಿಧಾನಗಳನ್ನು ಹೊಂದಿವೆ: ವೇಗದ ರಿಫ್ರೆಶ್ (ಒರಾಕಲ್) ಮತ್ತು ಇಂಡೆಕ್ಸ್ಡ್ ವ್ಯೂ (ಮೈಕ್ರೋಸಾಫ್ಟ್ SQL ಸರ್ವರ್) ಜೊತೆಗೆ ಮೆಟೀರಿಯಲ್ಸ್ ವ್ಯೂ. PostgreSQL ನಲ್ಲಿ, MATERIALIZED VIEW ಅನ್ನು ವಹಿವಾಟಿನಲ್ಲಿ ನವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ, ಆದರೆ ವಿನಂತಿಯ ಮೇರೆಗೆ ಮಾತ್ರ (ಮತ್ತು ತುಂಬಾ ಕಟ್ಟುನಿಟ್ಟಾದ ನಿರ್ಬಂಧಗಳೊಂದಿಗೆ), ಆದ್ದರಿಂದ ನಾವು ಅದನ್ನು ಪರಿಗಣಿಸುವುದಿಲ್ಲ. ಆದರೆ ಅವುಗಳ ಬಳಕೆಯನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಮಿತಿಗೊಳಿಸುವ ಹಲವಾರು ಸಮಸ್ಯೆಗಳಿವೆ.

ಮೊದಲನೆಯದಾಗಿ, ನೀವು ಈಗಾಗಲೇ ನಿಯಮಿತ ವೀಕ್ಷಣೆಯನ್ನು ರಚಿಸಿದ್ದರೆ ಮಾತ್ರ ನೀವು ಭೌತಿಕೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು. ಇಲ್ಲದಿದ್ದರೆ, ಈ ವಸ್ತುವನ್ನು ಬಳಸಲು ಹೊಸದಾಗಿ ರಚಿಸಲಾದ ವೀಕ್ಷಣೆಯನ್ನು ಪ್ರವೇಶಿಸಲು ನೀವು ಉಳಿದ ವಿನಂತಿಗಳನ್ನು ಪುನಃ ಬರೆಯಬೇಕಾಗುತ್ತದೆ. ಅಥವಾ ಎಲ್ಲವನ್ನೂ ಹಾಗೆಯೇ ಬಿಡಿ, ಆದರೆ ಈಗಾಗಲೇ ಪೂರ್ವ-ಲೆಕ್ಕಾಚಾರದ ಡೇಟಾ ಇದ್ದರೆ ಅದು ಕನಿಷ್ಠ ನಿಷ್ಪರಿಣಾಮಕಾರಿಯಾಗಿರುತ್ತದೆ, ಆದರೆ ಅನೇಕ ಪ್ರಶ್ನೆಗಳು ಯಾವಾಗಲೂ ಅದನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಆದರೆ ಅದನ್ನು ಮರು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ.

ಎರಡನೆಯದಾಗಿ, ಅವರು ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ನಿರ್ಬಂಧಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ:

ಒರಾಕಲ್

5.3.8.4 ಫಾಸ್ಟ್ ರಿಫ್ರೆಶ್‌ನಲ್ಲಿ ಸಾಮಾನ್ಯ ನಿರ್ಬಂಧಗಳು

ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯ ವ್ಯಾಖ್ಯಾನಿಸುವ ಪ್ರಶ್ನೆಯನ್ನು ಈ ಕೆಳಗಿನಂತೆ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:

  • ವಸ್ತುನಿಷ್ಠ ವೀಕ್ಷಣೆಯು ಪುನರಾವರ್ತಿತವಲ್ಲದ ಅಭಿವ್ಯಕ್ತಿಗಳ ಉಲ್ಲೇಖಗಳನ್ನು ಹೊಂದಿರಬಾರದು SYSDATE ಮತ್ತು ROWNUM.
  • ವಸ್ತುನಿಷ್ಠ ವೀಕ್ಷಣೆಯು ಉಲ್ಲೇಖಗಳನ್ನು ಹೊಂದಿರಬಾರದು RAW or LONG RAW ಡೇಟಾ ಪ್ರಕಾರಗಳು.
  • ಇದು a ಅನ್ನು ಒಳಗೊಂಡಿರಬಾರದು SELECT ಪಟ್ಟಿ ಉಪಪ್ರಶ್ನೆ.
  • ಇದು ವಿಶ್ಲೇಷಣಾತ್ಮಕ ಕಾರ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರಬಾರದು (ಉದಾಹರಣೆಗೆ, RANK) ರಲ್ಲಿ SELECT ಷರತ್ತು.
  • ಇದು ಒಂದು ಕೋಷ್ಟಕವನ್ನು ಉಲ್ಲೇಖಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ 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) ಹಾಜರಿರಬೇಕು. ಒರಾಕಲ್ ಅದನ್ನು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ SUM(expr) ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗುವುದು.
  • If VARIANCE(expr) or STDDEV(expr) ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ, COUNT(expr) ಮತ್ತು SUM(expr) ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು. ಒರಾಕಲ್ ಅದನ್ನು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ SUM(expr *expr) ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗುವುದು.
  • ನಮ್ಮ SELECT ವ್ಯಾಖ್ಯಾನಿಸುವ ಪ್ರಶ್ನೆಯಲ್ಲಿನ ಕಾಲಮ್ ಬಹು ಬೇಸ್ ಟೇಬಲ್‌ಗಳಿಂದ ಕಾಲಮ್‌ಗಳೊಂದಿಗೆ ಸಂಕೀರ್ಣ ಅಭಿವ್ಯಕ್ತಿಯಾಗಿರಬಾರದು. ನೆಸ್ಟೆಡ್ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯನ್ನು ಬಳಸುವುದು ಇದಕ್ಕೆ ಸಂಭವನೀಯ ಪರಿಹಾರವಾಗಿದೆ.
  • ನಮ್ಮ SELECT ಪಟ್ಟಿಯು ಎಲ್ಲವನ್ನೂ ಒಳಗೊಂಡಿರಬೇಕು GROUP BY ಕಾಲಮ್‌ಗಳು.
  • ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ದೂರಸ್ಥ ಕೋಷ್ಟಕಗಳನ್ನು ಆಧರಿಸಿಲ್ಲ.
  • ನೀವು ಬಳಸಿದರೆ ಎ CHAR ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆ ಲಾಗ್‌ನ ಫಿಲ್ಟರ್ ಕಾಲಮ್‌ಗಳಲ್ಲಿನ ಡೇಟಾ ಪ್ರಕಾರ, ಮಾಸ್ಟರ್ ಸೈಟ್‌ನ ಅಕ್ಷರ ಸೆಟ್‌ಗಳು ಮತ್ತು ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆ ಒಂದೇ ಆಗಿರಬೇಕು.
  • ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯು ಈ ಕೆಳಗಿನವುಗಳಲ್ಲಿ ಒಂದನ್ನು ಹೊಂದಿದ್ದರೆ, ಸಾಂಪ್ರದಾಯಿಕ DML ಒಳಸೇರಿಸುವಿಕೆಗಳು ಮತ್ತು ನೇರ ಲೋಡ್‌ಗಳಲ್ಲಿ ಮಾತ್ರ ವೇಗದ ರಿಫ್ರೆಶ್ ಅನ್ನು ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ.
    • ಇದರೊಂದಿಗೆ ವಸ್ತುೀಕೃತ ವೀಕ್ಷಣೆಗಳು MIN or MAX ಒಟ್ಟು
    • ಹೊಂದಿರುವ ವಸ್ತುನಿಷ್ಠ ವೀಕ್ಷಣೆಗಳು SUM(expr) ಆದರೆ ಇಲ್ಲ COUNT(expr)
    • ಇಲ್ಲದೆ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಗಳು COUNT(*)

    ಅಂತಹ ಭೌತಿಕ ದೃಷ್ಟಿಕೋನವನ್ನು ಇನ್ಸರ್ಟ್-ಓನ್ಲಿ ಮೆಟೀಲೈಸ್ಡ್ ವ್ಯೂ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ.

  • ಇದರೊಂದಿಗೆ ವಸ್ತುರೂಪದ ನೋಟ MAX or MIN ಅಳಿಸಿದ ನಂತರ ಅಥವಾ ಮಿಶ್ರ DML ಹೇಳಿಕೆಗಳನ್ನು ಹೊಂದಿರದಿದ್ದಲ್ಲಿ ವೇಗವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದು WHERE ಷರತ್ತು.
    ಅಳಿಸಿದ ನಂತರ ಗರಿಷ್ಠ/ನಿಮಿಷ ವೇಗದ ರಿಫ್ರೆಶ್ ಅಥವಾ ಮಿಶ್ರ DML ಇನ್ಸರ್ಟ್-ಓನ್ಲಿ ಕೇಸ್‌ನಂತೆಯೇ ವರ್ತನೆಯನ್ನು ಹೊಂದಿಲ್ಲ. ಇದು ಪೀಡಿತ ಗುಂಪುಗಳಿಗೆ ಗರಿಷ್ಠ/ನಿಮಿಷ ಮೌಲ್ಯಗಳನ್ನು ಅಳಿಸುತ್ತದೆ ಮತ್ತು ಮರುಗಣಿಸುತ್ತದೆ. ಅದರ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಭಾವದ ಬಗ್ಗೆ ನೀವು ತಿಳಿದಿರಬೇಕು.
  • ನಲ್ಲಿ ಹೆಸರಿಸಲಾದ ವೀಕ್ಷಣೆಗಳು ಅಥವಾ ಉಪಪ್ರಶ್ನೆಗಳೊಂದಿಗೆ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಗಳು FROM ವೀಕ್ಷಣೆಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ವಿಲೀನಗೊಳಿಸಿದರೆ ಷರತ್ತು ತ್ವರಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದು. ಯಾವ ವೀಕ್ಷಣೆಗಳು ವಿಲೀನಗೊಳ್ಳುತ್ತವೆ ಎಂಬ ಮಾಹಿತಿಗಾಗಿ, ನೋಡಿ ಒರಾಕಲ್ ಡೇಟಾಬೇಸ್ SQL ಭಾಷಾ ಉಲ್ಲೇಖ.
  • ಯಾವುದೇ ಹೊರಗಿನ ಸೇರ್ಪಡೆಗಳಿಲ್ಲದಿದ್ದರೆ, ನೀವು ಅನಿಯಂತ್ರಿತ ಆಯ್ಕೆಗಳನ್ನು ಹೊಂದಿರಬಹುದು ಮತ್ತು ಇದರಲ್ಲಿ ಸೇರಿಕೊಳ್ಳಬಹುದು WHERE ಷರತ್ತು.
  • ಸಾಂಪ್ರದಾಯಿಕ DML ಮತ್ತು ನೇರ ಲೋಡ್‌ಗಳ ನಂತರ ಹೊರಭಾಗದ ಒಟ್ಟುಗೂಡಿಸುವಿಕೆಯೊಂದಿಗೆ ಮೆಟೀರಿಯಲೈಸ್ಡ್ ಒಟ್ಟು ವೀಕ್ಷಣೆಗಳು ತ್ವರಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಆಗುತ್ತವೆ, ಹೊರಗಿನ ಕೋಷ್ಟಕವನ್ನು ಮಾತ್ರ ಮಾರ್ಪಡಿಸಲಾಗಿದೆ. ಅಲ್ಲದೆ, ಒಳಗಿನ ಸೇರ್ಪಡೆ ಕೋಷ್ಟಕದ ಸೇರ್ಪಡೆ ಕಾಲಮ್‌ಗಳಲ್ಲಿ ಅನನ್ಯ ನಿರ್ಬಂಧಗಳು ಅಸ್ತಿತ್ವದಲ್ಲಿರಬೇಕು. ಹೊರಗಿನ ಸೇರ್ಪಡೆಗಳಿದ್ದರೆ, ಎಲ್ಲಾ ಸೇರ್ಪಡೆಗಳನ್ನು ಸಂಪರ್ಕಿಸಬೇಕು ANDರು ಮತ್ತು ಸಮಾನತೆಯನ್ನು ಬಳಸಬೇಕು (=) ಆಪರೇಟರ್.
  • ಇದರೊಂದಿಗೆ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಗಳಿಗಾಗಿ CUBE, ROLLUP, ಗ್ರೂಪಿಂಗ್ ಸೆಟ್‌ಗಳು ಅಥವಾ ಅವುಗಳ ಸಂಯೋಜನೆ, ಈ ಕೆಳಗಿನ ನಿರ್ಬಂಧಗಳು ಅನ್ವಯಿಸುತ್ತವೆ:
    • ನಮ್ಮ SELECT ಪಟ್ಟಿಯು ಗ್ರೂಪಿಂಗ್ ಡಿಸ್ಟಿಂಗ್ವಿಶರ್ ಅನ್ನು ಹೊಂದಿರಬೇಕು ಅದು ಎ ಆಗಿರಬಹುದು 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 ಆಪರೇಟರ್ ಅನ್ನು ಸಬ್ಕ್ವೆರಿ ಒಳಗೆ ಎಂಬೆಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ, ಒಂದು ವಿನಾಯಿತಿಯೊಂದಿಗೆ: ದಿ UNION ALL ನಲ್ಲಿ ಉಪಪ್ರಶ್ನೆಯಲ್ಲಿರಬಹುದು FROM ವ್ಯಾಖ್ಯಾನಿಸುವ ಪ್ರಶ್ನೆಯು ರೂಪವಾಗಿದೆ ಎಂದು ಒದಗಿಸಿದ ಷರತ್ತು SELECT * FROM (ಇದರೊಂದಿಗೆ ವೀಕ್ಷಿಸಿ ಅಥವಾ ಉಪಪ್ರಶ್ನೆ UNION ALL) ಕೆಳಗಿನ ಉದಾಹರಣೆಯಲ್ಲಿರುವಂತೆ:

    ವೀಕ್ಷಿಸಿ_with_unionall AS (ಸೆಲೆಕ್ಟ್ c.rowid ಕ್ರಿಡ್, c.cust_id, 2 umarker ಗ್ರಾಹಕರಿಂದ c ಎಲ್ಲಿ c.cust_last_name = 'Smith' UNION ಎಲ್ಲಾ ಆಯ್ಕೆ c.rowid crid, c.cust_id, 3 umarker from c.cust_unionall AS AS ವೀಕ್ಷಿಸಿ 'ಜೋನ್ಸ್'); MATERIALIZED ವೀಕ್ಷಣೆಯನ್ನು ರಚಿಸಲು Unionall_inside_view_mv ಬೇಡಿಕೆಯ ಮೇರೆಗೆ ತ್ವರಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಿ * ಆಯ್ಕೆಯನ್ನು ವೀಕ್ಷಿಸಿ_with_unionall;
    

    ನೋಟ ಎಂಬುದನ್ನು ಗಮನಿಸಿ view_with_unionall ವೇಗದ ರಿಫ್ರೆಶ್‌ನ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸುತ್ತದೆ.

  • ಪ್ರತಿ ಪ್ರಶ್ನೆ ಬ್ಲಾಕ್ UNION ALL ಪ್ರಶ್ನೆಯು ಸಮುಚ್ಚಯಗಳೊಂದಿಗೆ ವೇಗದ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದಾದ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಬೇಕು ಅಥವಾ ಸೇರ್ಪಡೆಗಳೊಂದಿಗೆ ವೇಗದ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದಾದ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯನ್ನು ಪೂರೈಸಬೇಕು.

    ಅನುಗುಣವಾದ ವೇಗದ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದಾದ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಗೆ ಅಗತ್ಯವಿರುವಂತೆ ಸೂಕ್ತವಾದ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆ ಲಾಗ್‌ಗಳನ್ನು ಟೇಬಲ್‌ಗಳಲ್ಲಿ ರಚಿಸಬೇಕು.
    ಒರಾಕಲ್ ಡೇಟಾಬೇಸ್ ಒಂದೇ ಟೇಬಲ್ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯ ವಿಶೇಷ ಪ್ರಕರಣವನ್ನು ಸಹ ಸೇರ್ಪಡಿಕೆಗಳೊಂದಿಗೆ ಮಾತ್ರ ಒದಗಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ ROWID ಅಂಕಣವನ್ನು ಸೇರಿಸಲಾಗಿದೆ SELECT ಪಟ್ಟಿ ಮತ್ತು ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆ ಲಾಗ್‌ನಲ್ಲಿ. ವೀಕ್ಷಣೆಯ ವ್ಯಾಖ್ಯಾನಿಸುವ ಪ್ರಶ್ನೆಯಲ್ಲಿ ಇದನ್ನು ತೋರಿಸಲಾಗಿದೆ view_with_unionall.

  • ನಮ್ಮ SELECT ಪ್ರತಿ ಪ್ರಶ್ನೆಯ ಪಟ್ಟಿಯು ಒಳಗೊಂಡಿರಬೇಕು a UNION ALL ಮಾರ್ಕರ್, ಮತ್ತು UNION ALL ಕಾಲಮ್ ಪ್ರತಿಯೊಂದರಲ್ಲೂ ವಿಶಿಷ್ಟವಾದ ಸ್ಥಿರ ಸಂಖ್ಯಾ ಅಥವಾ ಸ್ಟ್ರಿಂಗ್ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿರಬೇಕು UNION ALL ಶಾಖೆ. ಇದಲ್ಲದೆ, ಮಾರ್ಕರ್ ಕಾಲಮ್ ಅದೇ ಆರ್ಡಿನಲ್ ಸ್ಥಾನದಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳಬೇಕು SELECT ಪ್ರತಿ ಪ್ರಶ್ನೆ ಬ್ಲಾಕ್‌ನ ಪಟ್ಟಿ. ನೋಡಿ"UNION ಎಲ್ಲಾ ಮಾರ್ಕರ್ ಮತ್ತು ಕ್ವೆರಿ ರಿರೈಟ್» ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ UNION ALL ಗುರುತುಗಳು.
  • ಹೊರಗಿನ ಸೇರ್ಪಡೆಗಳು, ಸೇರಿಸಲು-ಮಾತ್ರ ಒಟ್ಟು ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆ ಪ್ರಶ್ನೆಗಳು ಮತ್ತು ರಿಮೋಟ್ ಕೋಷ್ಟಕಗಳಂತಹ ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಗಳಿಗೆ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ UNION ALL. ಆದಾಗ್ಯೂ, ಸೇರ್ಪಡೆಗಳು ಅಥವಾ ಸಮುಚ್ಚಯಗಳನ್ನು ಹೊಂದಿರದ ಪುನರಾವರ್ತನೆಯಲ್ಲಿ ಬಳಸಲಾದ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಗಳನ್ನು ತ್ವರಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ಗಮನಿಸಿ UNION ALL ಅಥವಾ ದೂರಸ್ಥ ಕೋಷ್ಟಕಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
  • ಇದರೊಂದಿಗೆ ವೇಗವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದಾದ ವಸ್ತುರೂಪದ ವೀಕ್ಷಣೆಯನ್ನು ರಚಿಸಲು ಹೊಂದಾಣಿಕೆಯ ಪ್ರಾರಂಭಿಕ ನಿಯತಾಂಕವನ್ನು 9.2.0 ಅಥವಾ ಹೆಚ್ಚಿನದಕ್ಕೆ ಹೊಂದಿಸಬೇಕು UNION ALL.

ನಾನು ಒರಾಕಲ್ ಅಭಿಮಾನಿಗಳನ್ನು ಅಪರಾಧ ಮಾಡಲು ಬಯಸುವುದಿಲ್ಲ, ಆದರೆ ಅವರ ನಿರ್ಬಂಧಗಳ ಪಟ್ಟಿಯಿಂದ ನಿರ್ಣಯಿಸುವುದು, ಈ ಕಾರ್ಯವಿಧಾನವನ್ನು ಸಾಮಾನ್ಯ ಸಂದರ್ಭದಲ್ಲಿ ಬರೆಯಲಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ, ಕೆಲವು ರೀತಿಯ ಮಾದರಿಯನ್ನು ಬಳಸಿ, ಆದರೆ ಸಾವಿರಾರು ಭಾರತೀಯರಿಂದ, ಎಲ್ಲರಿಗೂ ಅವಕಾಶ ನೀಡಲಾಯಿತು. ತಮ್ಮದೇ ಆದ ಶಾಖೆಯನ್ನು ಬರೆಯಿರಿ, ಮತ್ತು ಪ್ರತಿಯೊಬ್ಬರೂ ತನಗೆ ಸಾಧ್ಯವಾದದ್ದನ್ನು ಮಾಡಿದರು ಮತ್ತು ಮಾಡಿದರು. ನೈಜ ತರ್ಕಕ್ಕಾಗಿ ಈ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸುವುದು ಮೈನ್‌ಫೀಲ್ಡ್ ಮೂಲಕ ನಡೆಯುವಂತಿದೆ. ಸ್ಪಷ್ಟವಲ್ಲದ ನಿರ್ಬಂಧಗಳಲ್ಲಿ ಒಂದನ್ನು ಹೊಡೆಯುವ ಮೂಲಕ ನೀವು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಗಣಿಯನ್ನು ಪಡೆಯಬಹುದು. ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದು ಪ್ರತ್ಯೇಕ ಪ್ರಶ್ನೆಯಾಗಿದೆ, ಆದರೆ ಇದು ಈ ಲೇಖನದ ವ್ಯಾಪ್ತಿಯನ್ನು ಮೀರಿದೆ.

Microsoft SQL ಸರ್ವರ್

ಹೆಚ್ಚುವರಿ ಅವಶ್ಯಕತೆಗಳು

SET ಆಯ್ಕೆಗಳು ಮತ್ತು ನಿರ್ಣಾಯಕ ಕಾರ್ಯದ ಅವಶ್ಯಕತೆಗಳ ಜೊತೆಗೆ, ಈ ಕೆಳಗಿನ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಬೇಕು:

  • ಕಾರ್ಯಗತಗೊಳಿಸುವ ಬಳಕೆದಾರ CREATE INDEX ನೋಟದ ಮಾಲೀಕರಾಗಿರಬೇಕು.
  • ನೀವು ಸೂಚ್ಯಂಕವನ್ನು ರಚಿಸಿದಾಗ, ದಿ IGNORE_DUP_KEY ಆಯ್ಕೆಯನ್ನು OFF ಗೆ ಹೊಂದಿಸಬೇಕು (ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್).
  • ಕೋಷ್ಟಕಗಳನ್ನು ಎರಡು ಭಾಗಗಳ ಹೆಸರುಗಳಿಂದ ಉಲ್ಲೇಖಿಸಬೇಕು, ಸ್ಕೀಮಾ.ಟೇಬಲ್ ಹೆಸರು ನೋಟ ವ್ಯಾಖ್ಯಾನದಲ್ಲಿ.
  • ವೀಕ್ಷಣೆಯಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ ಬಳಕೆದಾರ-ವ್ಯಾಖ್ಯಾನಿತ ಕಾರ್ಯಗಳನ್ನು ಬಳಸಿಕೊಂಡು ರಚಿಸಬೇಕು WITH SCHEMABINDING ಆಯ್ಕೆಯನ್ನು.
  • ವೀಕ್ಷಣೆಯಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ ಯಾವುದೇ ಬಳಕೆದಾರ-ವ್ಯಾಖ್ಯಾನಿತ ಕಾರ್ಯಗಳನ್ನು ಎರಡು-ಭಾಗದ ಹೆಸರುಗಳಿಂದ ಉಲ್ಲೇಖಿಸಬೇಕು, ..
  • ಬಳಕೆದಾರ-ವ್ಯಾಖ್ಯಾನಿತ ಕಾರ್ಯದ ಡೇಟಾ ಪ್ರವೇಶ ಆಸ್ತಿ ಇರಬೇಕು NO SQL, ಮತ್ತು ಬಾಹ್ಯ ಪ್ರವೇಶ ಆಸ್ತಿ ಇರಬೇಕು NO.
  • ಸಾಮಾನ್ಯ ಭಾಷೆಯ ರನ್ಟೈಮ್ (CLR) ಕಾರ್ಯಗಳು ವೀಕ್ಷಣೆಯ ಆಯ್ದ ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳಬಹುದು, ಆದರೆ ಕ್ಲಸ್ಟರ್ಡ್ ಇಂಡೆಕ್ಸ್ ಕೀಲಿಯ ವ್ಯಾಖ್ಯಾನದ ಭಾಗವಾಗಿರಬಾರದು. CLR ಕಾರ್ಯಗಳು ವೀಕ್ಷಣೆಯ WHERE ಷರತ್ತಿನಲ್ಲಿ ಅಥವಾ ವೀಕ್ಷಣೆಯಲ್ಲಿ ಸೇರುವ ಕಾರ್ಯಾಚರಣೆಯ ON ಷರತ್ತಿನಲ್ಲಿ ಗೋಚರಿಸುವುದಿಲ್ಲ.
  • ವೀಕ್ಷಣೆ ವ್ಯಾಖ್ಯಾನದಲ್ಲಿ ಬಳಸಲಾದ CLR ಕಾರ್ಯಗಳು ಮತ್ತು CLR ಬಳಕೆದಾರ-ವ್ಯಾಖ್ಯಾನಿತ ಪ್ರಕಾರಗಳ ವಿಧಾನಗಳು ಕೆಳಗಿನ ಕೋಷ್ಟಕದಲ್ಲಿ ತೋರಿಸಿರುವಂತೆ ಹೊಂದಿಸಲಾದ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರಬೇಕು.

    ಆಸ್ತಿ
    ಸೂಚನೆ

    ಡಿಟರ್ಮಿನಿಸ್ಟಿಕ್ = ನಿಜ
    Microsoft .NET ಫ್ರೇಮ್‌ವರ್ಕ್ ವಿಧಾನದ ಗುಣಲಕ್ಷಣವಾಗಿ ಸ್ಪಷ್ಟವಾಗಿ ಘೋಷಿಸಬೇಕು.

    ನಿಖರ = ನಿಜ
    .NET ಫ್ರೇಮ್‌ವರ್ಕ್ ವಿಧಾನದ ಗುಣಲಕ್ಷಣವಾಗಿ ಸ್ಪಷ್ಟವಾಗಿ ಘೋಷಿಸಬೇಕು.

    ಡೇಟಾ ಪ್ರವೇಶ = SQL ಇಲ್ಲ
    DataAccessKind.None ಗೆ DataAccess ಗುಣಲಕ್ಷಣವನ್ನು ಹೊಂದಿಸುವ ಮೂಲಕ ಮತ್ತು SystemDataAccess ಗುಣಲಕ್ಷಣವನ್ನು SystemDataAccessKind.None ಗೆ ಹೊಂದಿಸುವ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ.

    ಬಾಹ್ಯ ಪ್ರವೇಶ = ನಂ
    CLR ದಿನಚರಿಗಳಿಗಾಗಿ ಈ ಆಸ್ತಿ NO ಗೆ ಡಿಫಾಲ್ಟ್ ಆಗುತ್ತದೆ.

  • ಅನ್ನು ಬಳಸಿಕೊಂಡು ವೀಕ್ಷಣೆಯನ್ನು ರಚಿಸಬೇಕು WITH SCHEMABINDING ಆಯ್ಕೆಯನ್ನು.
  • ವೀಕ್ಷಣೆಯು ವೀಕ್ಷಣೆಯಂತೆಯೇ ಅದೇ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿರುವ ಮೂಲ ಕೋಷ್ಟಕಗಳನ್ನು ಮಾತ್ರ ಉಲ್ಲೇಖಿಸಬೇಕು. ವೀಕ್ಷಣೆಯು ಇತರ ವೀಕ್ಷಣೆಗಳನ್ನು ಉಲ್ಲೇಖಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
  • ವೀಕ್ಷಣೆಯ ವ್ಯಾಖ್ಯಾನದಲ್ಲಿನ SELECT ಹೇಳಿಕೆಯು ಈ ಕೆಳಗಿನ ವಹಿವಾಟು-SQL ಅಂಶಗಳನ್ನು ಹೊಂದಿರಬಾರದು:

    COUNT
    ROWSET ಕಾರ್ಯಗಳು (OPENDATASOURCE, OPENQUERY, OPENROWSET, ಮತ್ತು OPENXML)
    OUTER ಸೇರುತ್ತದೆ (LEFT, RIGHTಅಥವಾ FULL)

    ಪಡೆದ ಕೋಷ್ಟಕ (ಎ ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ SELECT ನಲ್ಲಿ ಹೇಳಿಕೆ FROM ಷರತ್ತು)
    ಸ್ವಯಂ ಸೇರಿಕೊಳ್ಳುತ್ತದೆ
    ಬಳಸುವ ಮೂಲಕ ಕಾಲಮ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವುದು SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARPಅಥವಾ AVG
    ಸಾಮಾನ್ಯ ಕೋಷ್ಟಕ ಅಭಿವ್ಯಕ್ತಿ (CTE)

    ಫ್ಲೋಟ್1, ಪಠ್ಯ, ntext, ಚಿತ್ರ, ಮದುವೆಅಥವಾ ಫೈಲ್ಸ್ಟ್ರೀಮ್ ಕಾಲಮ್‌ಗಳು
    ಉಪಪ್ರಶ್ನೆ
    OVER ಷರತ್ತು, ಇದು ಶ್ರೇಯಾಂಕ ಅಥವಾ ಒಟ್ಟು ವಿಂಡೋ ಕಾರ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ

    ಪೂರ್ಣ-ಪಠ್ಯ ಮುನ್ಸೂಚನೆಗಳು (CONTAINS, FREETEXT)
    SUM ಶೂನ್ಯ ಅಭಿವ್ಯಕ್ತಿಯನ್ನು ಉಲ್ಲೇಖಿಸುವ ಕಾರ್ಯ
    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 ಹೇಳಿಕೆಯು ಈ ಕೆಳಗಿನ ವಹಿವಾಟು-SQL ಅಂಶಗಳನ್ನು ಹೊಂದಿರಬಾರದು:

COUNT
ROWSET ಕಾರ್ಯಗಳು (OPENDATASOURCE, OPENQUERY, OPENROWSET, ಮತ್ತು OPENXML)
OUTER ಸೇರುತ್ತದೆ (LEFT, RIGHTಅಥವಾ FULL)

ಪಡೆದ ಕೋಷ್ಟಕ (ಎ ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ SELECT ನಲ್ಲಿ ಹೇಳಿಕೆ FROM ಷರತ್ತು)
ಸ್ವಯಂ ಸೇರಿಕೊಳ್ಳುತ್ತದೆ
ಬಳಸುವ ಮೂಲಕ ಕಾಲಮ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವುದು SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARPಅಥವಾ AVG
ಸಾಮಾನ್ಯ ಕೋಷ್ಟಕ ಅಭಿವ್ಯಕ್ತಿ (CTE)

ಫ್ಲೋಟ್1, ಪಠ್ಯ, ntext, ಚಿತ್ರ, ಮದುವೆಅಥವಾ ಫೈಲ್ಸ್ಟ್ರೀಮ್ ಕಾಲಮ್‌ಗಳು
ಉಪಪ್ರಶ್ನೆ
OVER ಷರತ್ತು, ಇದು ಶ್ರೇಯಾಂಕ ಅಥವಾ ಒಟ್ಟು ವಿಂಡೋ ಕಾರ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ

ಪೂರ್ಣ-ಪಠ್ಯ ಮುನ್ಸೂಚನೆಗಳು (CONTAINS, FREETEXT)
SUM ಶೂನ್ಯ ಅಭಿವ್ಯಕ್ತಿಯನ್ನು ಉಲ್ಲೇಖಿಸುವ ಕಾರ್ಯ
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

ಔಟರ್ ಜಾಯಿನ್ಸ್, ಯುನಿಯನ್, ಆರ್ಡರ್ ಬೈ ಮತ್ತು ಇತರವುಗಳನ್ನು ನಿಷೇಧಿಸಲಾಗಿದೆ. ಯಾವುದನ್ನು ಬಳಸಬಾರದು ಎನ್ನುವುದಕ್ಕಿಂತ ಯಾವುದನ್ನು ಬಳಸಬಹುದೆಂದು ಸೂಚಿಸುವುದು ಸುಲಭವಾಗಿರಬಹುದು. ಪಟ್ಟಿ ಬಹುಶಃ ತುಂಬಾ ಚಿಕ್ಕದಾಗಿದೆ.

ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಹೇಳುವುದಾದರೆ: LGPL ತಂತ್ರಜ್ಞಾನದಲ್ಲಿ ಪ್ರತಿಯೊಂದು (ವಾಣಿಜ್ಯವನ್ನು ಗಮನಿಸೋಣ) DBMS ವಿರುದ್ಧ ಯಾವುದೂ ಇಲ್ಲ (ಒಂದು ತಾರ್ಕಿಕ, ತಾಂತ್ರಿಕವಲ್ಲದ) ನಿರ್ಬಂಧಗಳ ಒಂದು ದೊಡ್ಡ ಸೆಟ್. ಆದಾಗ್ಯೂ, ವಿವರಿಸಿದ ಕ್ರಿಯಾತ್ಮಕ ತರ್ಕಕ್ಕಿಂತ ಸಂಬಂಧಿತ ತರ್ಕದಲ್ಲಿ ಈ ಕಾರ್ಯವಿಧಾನವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಕಷ್ಟಕರವಾಗಿದೆ ಎಂದು ಗಮನಿಸಬೇಕು.

Реализация

ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ? PostgreSQL ಅನ್ನು "ವರ್ಚುವಲ್ ಮೆಷಿನ್" ಆಗಿ ಬಳಸಲಾಗುತ್ತದೆ. ಪ್ರಶ್ನೆಗಳನ್ನು ನಿರ್ಮಿಸುವ ಸಂಕೀರ್ಣ ಅಲ್ಗಾರಿದಮ್ ಒಳಗೆ ಇದೆ. ಇಲ್ಲಿ ಮೂಲ. ಮತ್ತು ifs ನ ಗುಂಪಿನೊಂದಿಗೆ ಕೇವಲ ಹ್ಯೂರಿಸ್ಟಿಕ್ಸ್‌ನ ದೊಡ್ಡ ಸೆಟ್ ಇಲ್ಲ. ಆದ್ದರಿಂದ, ನೀವು ಅಧ್ಯಯನ ಮಾಡಲು ಒಂದೆರಡು ತಿಂಗಳುಗಳಿದ್ದರೆ, ನೀವು ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಬಹುದು.

ಇದು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆಯೇ? ಸಾಕಷ್ಟು ಪರಿಣಾಮಕಾರಿ. ದುರದೃಷ್ಟವಶಾತ್, ಇದನ್ನು ಸಾಬೀತುಪಡಿಸುವುದು ಕಷ್ಟ. ದೊಡ್ಡ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಇರುವ ಸಾವಿರಾರು ವಿನಂತಿಗಳನ್ನು ನೀವು ಪರಿಗಣಿಸಿದರೆ, ಸರಾಸರಿಯಾಗಿ ಅವು ಉತ್ತಮ ಡೆವಲಪರ್‌ಗಿಂತ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿ ಎಂದು ನಾನು ಹೇಳಬಲ್ಲೆ. ಅತ್ಯುತ್ತಮ SQL ಪ್ರೋಗ್ರಾಮರ್ ಯಾವುದೇ ಪ್ರಶ್ನೆಯನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬರೆಯಬಹುದು, ಆದರೆ ಸಾವಿರ ಪ್ರಶ್ನೆಗಳೊಂದಿಗೆ ಅವರು ಅದನ್ನು ಮಾಡಲು ಪ್ರೇರಣೆ ಅಥವಾ ಸಮಯವನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ. ಪರಿಣಾಮಕಾರಿತ್ವದ ಪುರಾವೆಯಾಗಿ ನಾನು ಈಗ ಉಲ್ಲೇಖಿಸಬಹುದಾದ ಏಕೈಕ ವಿಷಯವೆಂದರೆ ಈ DBMS ನಲ್ಲಿ ನಿರ್ಮಿಸಲಾದ ವೇದಿಕೆಯಲ್ಲಿ ಹಲವಾರು ಯೋಜನೆಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿವೆ ERP ವ್ಯವಸ್ಥೆಗಳು, ಇದು ಸಾವಿರಾರು ವಿಭಿನ್ನ ಮೆಟೀರಿಯಲೈಸ್ಡ್ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಹೊಂದಿದೆ, ಸಾವಿರಾರು ಬಳಕೆದಾರರು ಮತ್ತು ಟೆರಾಬೈಟ್ ಡೇಟಾಬೇಸ್‌ಗಳೊಂದಿಗೆ ನೂರಾರು ಮಿಲಿಯನ್ ದಾಖಲೆಗಳು ಸಾಮಾನ್ಯ ಎರಡು-ಪ್ರೊಸೆಸರ್ ಸರ್ವರ್‌ನಲ್ಲಿ ಚಾಲನೆಯಾಗುತ್ತವೆ. ಆದಾಗ್ಯೂ, ಡೌನ್‌ಲೋಡ್ ಮಾಡುವ ಮೂಲಕ ಯಾರಾದರೂ ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಪರಿಶೀಲಿಸಬಹುದು/ನಿರಾಕರಿಸಬಹುದು ವೇದಿಕೆ ಮತ್ತು PostgreSQL, ಪ್ರಾರಂಭಿಸು SQL ಪ್ರಶ್ನೆಗಳನ್ನು ಲಾಗ್ ಮಾಡುವುದು ಮತ್ತು ಅಲ್ಲಿ ತರ್ಕ ಮತ್ತು ಡೇಟಾವನ್ನು ಬದಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ.

ಮುಂದಿನ ಲೇಖನಗಳಲ್ಲಿ, ನೀವು ಕಾರ್ಯಗಳ ಮೇಲೆ ನಿರ್ಬಂಧಗಳನ್ನು ಹೇಗೆ ಹೊಂದಿಸಬಹುದು, ಬದಲಾವಣೆಯ ಅವಧಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಮತ್ತು ಹೆಚ್ಚಿನದನ್ನು ಹೇಗೆ ಮಾಡಬಹುದು ಎಂಬುದರ ಕುರಿತು ನಾನು ಮಾತನಾಡುತ್ತೇನೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ