ஒரு தரவுத்தளத்தில் எழுதும் மற்றும் படிக்கும் சமநிலை

ஒரு தரவுத்தளத்தில் எழுதும் மற்றும் படிக்கும் சமநிலை
முந்தையதில் கட்டுரை தொடர்புடைய தரவுத்தளங்களில் உள்ள அட்டவணைகள் மற்றும் புலங்களைக் காட்டிலும் செயல்பாடுகளின் அடிப்படையில் உருவாக்கப்பட்ட தரவுத்தளத்தின் கருத்து மற்றும் செயல்படுத்தலை நான் விவரித்தேன். கிளாசிக்கல் அணுகுமுறையை விட இந்த அணுகுமுறையின் நன்மைகளைக் காட்டும் பல எடுத்துக்காட்டுகளை இது வழங்கியது. பலருக்கு அவர்கள் போதுமான நம்பிக்கை இல்லை.

இந்த கட்டுரையில், இயக்க தர்க்கத்தில் எந்த மாற்றமும் இல்லாமல் தரவுத்தளத்தில் எழுதுவதையும் வாசிப்பதையும் விரைவாகவும் வசதியாகவும் சமநிலைப்படுத்த இந்த கருத்து உங்களை எவ்வாறு அனுமதிக்கிறது என்பதைக் காண்பிப்பேன். நவீன வணிக DBMS களில் (குறிப்பாக, 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(துறைகளின் எண்ணிக்கை) குழுவாக்கம் மற்றும் பல.

வெவ்வேறு DBMS களில் செயல்படுத்தும் மேல்நிலை வேறுபட்டிருக்கலாம் என்பது தெளிவாகிறது, ஆனால் சிக்கலானது எந்த வகையிலும் மாறாது.

முன்மொழியப்பட்ட செயலாக்கத்தில், செயல்பாட்டு DBMS ஒரு துணை வினவலை உருவாக்கும், அது துறைக்குத் தேவையான மதிப்புகளைக் கணக்கிடும், பின்னர் பெயரைப் பெற டிபார்ட்மென்ட் அட்டவணையுடன் ஒரு சேரவும். இருப்பினும், ஒவ்வொரு செயல்பாட்டிற்கும், அறிவிக்கும் போது, ​​ஒரு சிறப்பு MATERIALIZED மார்க்கரை அமைக்க முடியும். அத்தகைய ஒவ்வொரு செயல்பாட்டிற்கும் கணினி தானாகவே தொடர்புடைய புலத்தை உருவாக்கும். செயல்பாட்டின் மதிப்பை மாற்றும்போது, ​​அதே பரிவர்த்தனையில் புலத்தின் மதிப்பும் மாறும். இந்தச் செயல்பாட்டை அணுகும்போது, ​​முன் கணக்கிடப்பட்ட புலம் அணுகப்படும்.

குறிப்பாக, செயல்பாடுகளுக்கு MATERIALIZED என அமைத்தால் எண்ணி பணியாளர்கள் и சம்பளம், பின்னர் இரண்டு துறைகள் துறைகளின் பட்டியலுடன் அட்டவணையில் சேர்க்கப்படும், இது ஊழியர்களின் எண்ணிக்கை மற்றும் அவர்களின் மொத்த சம்பளத்தை சேமிக்கும். பணியாளர்கள், அவர்களின் சம்பளம் அல்லது துறை இணைப்புகளில் மாற்றம் ஏற்படும் போதெல்லாம், கணினி தானாகவே இந்த துறைகளின் மதிப்புகளை மாற்றும். மேலே உள்ள வினவல் இந்த புலங்களை நேரடியாக அணுகும் மற்றும் செயல்படுத்தப்படும் O(துறைகளின் எண்ணிக்கை).

கட்டுப்பாடுகள் என்ன? ஒரே ஒரு விஷயம்: அத்தகைய செயல்பாடு வரையறுக்கப்பட்ட உள்ளீட்டு மதிப்புகளைக் கொண்டிருக்க வேண்டும், அதன் மதிப்பு வரையறுக்கப்படுகிறது. இல்லையெனில், எண்ணற்ற வரிசைகளைக் கொண்ட அட்டவணை இருக்க முடியாது என்பதால், அதன் அனைத்து மதிப்புகளையும் சேமிக்கும் அட்டவணையை உருவாக்குவது சாத்தியமில்லை.

உதாரணம்:

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

இந்த செயல்பாடு N இன் எண்ணற்ற மதிப்புகளுக்கு வரையறுக்கப்படுகிறது (எடுத்துக்காட்டாக, எந்த எதிர்மறை மதிப்பும் பொருத்தமானது). எனவே, நீங்கள் அதில் MATERIALIZED போட முடியாது. எனவே இது ஒரு தர்க்கரீதியான வரம்பு, தொழில்நுட்பம் அல்ல (அதாவது, அதைச் செயல்படுத்த முடியவில்லை என்பதால் அல்ல). இல்லையெனில், எந்த கட்டுப்பாடுகளும் இல்லை. நீங்கள் குழுக்கள், வரிசைப்படுத்துதல், மற்றும் மற்றும் அல்லது, பகிர்வு, மறுநிகழ்வு போன்றவற்றைப் பயன்படுத்தலாம்.

எடுத்துக்காட்டாக, முந்தைய கட்டுரையின் சிக்கல் 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;

கணினியே வகை விசைகளுடன் ஒரு அட்டவணையை உருவாக்கும் வாடிக்கையாளர், பொருள் и INTEGER, அதில் இரண்டு புலங்களைச் சேர்த்து, அவற்றில் உள்ள புல மதிப்புகளை ஏதேனும் மாற்றங்களுடன் புதுப்பிக்கும். இந்த செயல்பாடுகளுக்கு மேலும் அழைப்புகள் செய்யப்படும்போது, ​​அவை கணக்கிடப்படாது, மாறாக மதிப்புகள் தொடர்புடைய புலங்களில் இருந்து படிக்கப்படும்.

இந்த பொறிமுறையைப் பயன்படுத்தி, எடுத்துக்காட்டாக, வினவல்களில் உள்ள மறுநிகழ்வுகளை (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;

செயல்பாட்டிற்காக இருந்து பெற்றோர் MATERIALIZED என்று குறிக்கப்பட்டது, பின்னர் இரண்டு விசைகள் (குழுக்கள்) கொண்ட அட்டவணை உருவாக்கப்படும், அதில் புலம் பெற்றோர் முதல் சாவி இரண்டாவது குழந்தையாக இருந்தால் மட்டுமே உண்மையாக இருக்கும். இந்த அட்டவணையில் உள்ள உள்ளீடுகளின் எண்ணிக்கை, மரத்தின் சராசரி ஆழத்தால் பெருக்கப்படும் குழுக்களின் எண்ணிக்கைக்கு சமமாக இருக்கும். உங்களுக்கு தேவைப்பட்டால், எடுத்துக்காட்டாக, ஒரு குறிப்பிட்ட குழுவின் சந்ததியினரின் எண்ணிக்கையை கணக்கிட, நீங்கள் இந்த செயல்பாட்டைப் பயன்படுத்தலாம்:

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;

ஒரு செயல்பாட்டை அழைக்கும் போது தேதி ஆர்டர் வரிக்கு, அட்டவணையில் உள்ள புலம் வரிசைக் கோடுகளுடன் படிக்கப்படும். ஆர்டர் தேதி மாறும் போது, ​​கணினி தானாகவே வரியில் இயல்புநிலை மாற்றப்பட்ட தேதியை மீண்டும் கணக்கிடும்.

நன்மைகள்

இந்த முழு பொறிமுறையும் எதற்காக? கிளாசிக் DBMS களில், வினவல்களை மீண்டும் எழுதாமல், ஒரு டெவலப்பர் அல்லது DBA மட்டுமே குறியீடுகளை மாற்ற முடியும், புள்ளிவிவரங்களைத் தீர்மானிக்க முடியும் மற்றும் அவற்றை எவ்வாறு செயல்படுத்துவது என்று வினவல் திட்டமிடுபவருக்குச் சொல்ல முடியும் (மற்றும் குறிப்புகள் வணிக DBMS களில் மட்டுமே கிடைக்கும்). அவர்கள் எவ்வளவு முயற்சி செய்தாலும், கட்டுரையில் உள்ள முதல் வினவலை அவர்களால் முடிக்க முடியாது O (துறைகளின் எண்ணிக்கை) வினவல்களை மாற்றாமல் அல்லது தூண்டுதல்களைச் சேர்க்காமல். முன்மொழியப்பட்ட திட்டத்தில், வளர்ச்சி கட்டத்தில் நீங்கள் தரவு சேமிப்பக அமைப்பு மற்றும் எந்த திரட்டல்களைப் பயன்படுத்த வேண்டும் என்பதைப் பற்றி சிந்திக்க வேண்டியதில்லை. இவை அனைத்தும் பறக்கும்போது, ​​நேரடியாக செயல்பாட்டில் எளிதாக மாற்றப்படலாம்.

நடைமுறையில் இது போல் தெரிகிறது. சிலர் கையில் உள்ள பணியின் அடிப்படையில் நேரடியாக தர்க்கத்தை உருவாக்குகிறார்கள். அவர்கள் அல்காரிதம்கள் மற்றும் அவற்றின் சிக்கலான தன்மை, செயல்படுத்தல் திட்டங்கள், இணைத்தல் வகைகள் அல்லது வேறு எந்த தொழில்நுட்ப கூறுகளையும் புரிந்து கொள்ளவில்லை. இந்த நபர்கள் டெவலப்பர்களை விட வணிக ஆய்வாளர்கள். பின்னர், இவை அனைத்தும் சோதனை அல்லது செயல்பாட்டிற்கு செல்லும். நீண்ட கால வினவல்களை பதிவு செய்வதை செயல்படுத்துகிறது. நீண்ட வினவல் கண்டறியப்பட்டால், பிற நபர்கள் (அதிக தொழில்நுட்பம் - அடிப்படையில் DBA) சில இடைநிலை செயல்பாட்டில் MATERIALIZED ஐ இயக்க முடிவு செய்கிறார்கள். இது பதிவை சிறிது குறைக்கிறது (பரிவர்த்தனையில் கூடுதல் புலத்தைப் புதுப்பிக்க வேண்டும் என்பதால்). இருப்பினும், இந்த வினவல் கணிசமாக வேகப்படுத்தப்பட்டது மட்டுமல்லாமல், இந்த செயல்பாட்டைப் பயன்படுத்தும் மற்ற அனைத்தும். அதே நேரத்தில், எந்தச் செயல்பாட்டைச் செயல்படுத்துவது என்பதைத் தீர்மானிப்பது ஒப்பீட்டளவில் எளிதானது. இரண்டு முக்கிய அளவுருக்கள்: சாத்தியமான உள்ளீட்டு மதிப்புகளின் எண்ணிக்கை (தொடர்புடைய அட்டவணையில் எத்தனை பதிவுகள் இருக்கும்), மற்றும் பிற செயல்பாடுகளில் இது எவ்வளவு அடிக்கடி பயன்படுத்தப்படுகிறது.

ஒப்புமை

நவீன வணிக DBMSகள் இதே போன்ற வழிமுறைகளைக் கொண்டுள்ளன: FAST REFRESH (Oracle) மற்றும் INDEXED VIEW (Microsoft SQL Server) உடன் மெட்டீரியலைஸ்டு வியூ. PostgreSQL இல், ஒரு பரிவர்த்தனையில் MATERIALIZED VIEW புதுப்பிக்க முடியாது, ஆனால் கோரிக்கையின் பேரில் மட்டுமே (மற்றும் மிகவும் கடுமையான கட்டுப்பாடுகளுடன் கூட), எனவே நாங்கள் அதை கருத்தில் கொள்ள மாட்டோம். ஆனால் அவற்றின் பயன்பாட்டை கணிசமாகக் கட்டுப்படுத்தும் பல சிக்கல்கள் உள்ளன.

முதலாவதாக, நீங்கள் ஏற்கனவே வழக்கமான பார்வையை உருவாக்கியிருந்தால் மட்டுமே நீங்கள் பொருள்மயமாக்கலை இயக்க முடியும். இல்லையெனில், இந்தப் பொருள்மயமாக்கலைப் பயன்படுத்த, புதிதாக உருவாக்கப்பட்ட காட்சியை அணுக மீதமுள்ள கோரிக்கைகளை நீங்கள் மீண்டும் எழுத வேண்டும். அல்லது எல்லாவற்றையும் அப்படியே விட்டுவிடுங்கள், ஆனால் ஏற்கனவே முன்கூட்டியே கணக்கிடப்பட்ட தரவு இருந்தால் அது குறைந்தபட்சம் பயனற்றதாக இருக்கும், ஆனால் பல வினவல்கள் எப்போதும் அதைப் பயன்படுத்துவதில்லை, ஆனால் அதை மீண்டும் கணக்கிடுகின்றன.

இரண்டாவதாக, அவர்களுக்கு ஏராளமான கட்டுப்பாடுகள் உள்ளன:

Oracle

5.3.8.4 விரைவான புதுப்பிப்புக்கான பொதுவான கட்டுப்பாடுகள்

பொருள்படுத்தப்பட்ட பார்வையின் வரையறுக்கும் வினவல் பின்வருமாறு கட்டுப்படுத்தப்பட்டுள்ளது:

  • பொருளடக்கம் செய்யப்பட்ட பார்வையில், திரும்பத் திரும்ப வராத வெளிப்பாடுகள் போன்ற குறிப்புகள் இருக்கக்கூடாது SYSDATE மற்றும் ROWNUM.
  • பொருள்படுத்தப்பட்ட பார்வையில் குறிப்புகள் இருக்கக்கூடாது RAW or LONG RAW தரவு வகைகள்.
  • இது ஒரு கொண்டிருக்க முடியாது SELECT பட்டியல் துணை வினவல்.
  • இது பகுப்பாய்வு செயல்பாடுகளைக் கொண்டிருக்க முடியாது (எடுத்துக்காட்டாக, RANK) இல் SELECT உட்கூறு.
  • இது ஒரு அட்டவணையை குறிப்பிட முடியாது XMLIndex குறியீடானது வரையறுக்கப்பட்டுள்ளது.
  • இது ஒரு கொண்டிருக்க முடியாது MODEL உட்கூறு.
  • இது ஒரு கொண்டிருக்க முடியாது HAVING துணைக் கேள்வியுடன் உட்பிரிவு.
  • இது உள்ளமை வினவல்களைக் கொண்டிருக்க முடியாது ANY, ALL, அல்லது NOT EXISTS.
  • இது ஒரு கொண்டிருக்க முடியாது [START WITH …] CONNECT BY உட்கூறு.
  • இது வெவ்வேறு தளங்களில் பல விவர அட்டவணைகளைக் கொண்டிருக்க முடியாது.
  • ON COMMIT பொருளடக்கம் செய்யப்பட்ட காட்சிகளில் தொலை விவர அட்டவணைகள் இருக்கக்கூடாது.
  • உள்ளமைக்கப்பட்ட காட்சிகள் இணைதல் அல்லது மொத்தமாக இருக்க வேண்டும்.
  • மெட்டீரியலைஸ்டு சேர் வியூஸ் மற்றும் மெட்டீரியலைஸ்டு ஒட்டு மொத்தக் காட்சிகள் 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 டிஎம்எல் ஸ்டேட்மென்ட்களை நீக்கிய பிறகு அல்லது கலப்பு டிஎம்எல் ஸ்டேட்மென்ட் இல்லை என்றால் வேகமாகப் புதுப்பிக்கப்படும் 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 crid, c.cust_id, 2 umarker ஐத் தேர்ந்தெடுங்கள் c எங்கிருந்து c.cust_last_name = 'Smith' UNION அனைத்தையும் தேர்ந்தெடுக்கவும் c.rowid crid, c.cust_id, 3 umarker c. 'ஜோன்ஸ்'); மெட்டீரியலைஸ்டு காட்சியை யூனியன்ஆல்_இன்சைடு_வியூ_எம்வியை விரைவாகப் புதுப்பிக்கவும்.
    

    பார்வை என்பதை கவனத்தில் கொள்ளவும் view_with_unionall விரைவான புதுப்பிப்புக்கான தேவைகளை பூர்த்தி செய்கிறது.

  • ஒவ்வொரு வினவல் தொகுதி UNION ALL வினவல் ஒரு வேகமான புதுப்பிக்கத்தக்க மெட்டீரியல் காட்சியின் தேவைகளை ஒருங்கிணைக்க வேண்டும் அல்லது சேர்ப்புடன் கூடிய வேகமான புதுப்பிக்கக்கூடிய மெட்டீரியல் காட்சியை பூர்த்தி செய்ய வேண்டும்.

    வேகமான புதுப்பிக்கத்தக்க மெட்டீரியலைஸ்டு காட்சியின் தொடர்புடைய வகைக்குத் தேவைக்கேற்ப, அட்டவணையில் பொருத்தமான பொருளடக்கம் செய்யப்பட்ட காட்சிப் பதிவுகள் உருவாக்கப்பட வேண்டும்.
    ஆரக்கிள் தரவுத்தளமானது ஒரு டேபிள் மெட்டீரியலைஸ்டு காட்சியின் சிறப்புக் காட்சியை மட்டுமே வழங்கியுள்ள இணைப்புகளுடன் அனுமதிக்கிறது என்பதை நினைவில் கொள்ளவும். ROWID பத்தியில் சேர்க்கப்பட்டுள்ளது SELECT பட்டியல் மற்றும் பொருளடக்கம் செய்யப்பட்ட பார்வை பதிவில். இது பார்வையின் வரையறுக்கும் வினவலில் காட்டப்பட்டுள்ளது view_with_unionall.

  • தி SELECT ஒவ்வொரு வினவல் பட்டியலிலும் இருக்க வேண்டும் a UNION ALL குறிப்பான், மற்றும் UNION ALL நெடுவரிசை ஒவ்வொன்றிலும் ஒரு தனித்துவமான நிலையான எண் அல்லது சர மதிப்பு இருக்க வேண்டும் UNION ALL கிளை. மேலும், மார்க்கர் நெடுவரிசையில் அதே வரிசை நிலையில் தோன்ற வேண்டும் SELECT ஒவ்வொரு வினவல் தொகுதியின் பட்டியல். பார்க்க"யூனியன் அனைத்து மார்க்கர் மற்றும் வினவல் மீண்டும் எழுதவும்» பற்றிய கூடுதல் தகவலுக்கு UNION ALL குறிப்பான்கள்.
  • வெளிப்புற இணைப்புகள், செருகு-மட்டுமே மொத்த மெட்டீரியல் காட்சி வினவல்கள் மற்றும் ரிமோட் டேபிள்கள் போன்ற சில அம்சங்கள் உள்ளடக்கப்பட்ட பார்வைகளுக்கு ஆதரிக்கப்படாது UNION ALL. எவ்வாறாயினும், இணைத்தல் அல்லது திரட்டுதல்கள் இல்லாத பிரதியெடுப்பில் பயன்படுத்தப்படும் பொருளடக்கம் செய்யப்பட்ட காட்சிகள் விரைவாக புதுப்பிக்கப்படும். UNION ALL அல்லது தொலை அட்டவணைகள் பயன்படுத்தப்படுகின்றன.
  • இதனுடன் வேகமாகப் புதுப்பிக்கக்கூடிய மெட்டீரியல் காட்சியை உருவாக்க, பொருந்தக்கூடிய துவக்க அளவுரு 9.2.0 அல்லது அதற்கும் அதிகமாக அமைக்கப்பட வேண்டும். UNION ALL.

நான் ஆரக்கிள் ரசிகர்களை புண்படுத்த விரும்பவில்லை, ஆனால் அவர்களின் கட்டுப்பாடுகளின் பட்டியலைப் பார்க்கும்போது, ​​​​இந்த வழிமுறை பொதுவான வழக்கில் அல்ல, ஒருவித மாதிரியைப் பயன்படுத்தி எழுதப்பட்டது, ஆனால் ஆயிரக்கணக்கான இந்தியர்களால் எழுதப்பட்டது, அங்கு அனைவருக்கும் வாய்ப்பு வழங்கப்பட்டது. தங்கள் சொந்த கிளையை எழுதுங்கள், அவர்கள் ஒவ்வொருவரும் அவரால் முடிந்ததைச் செய்தார்கள். உண்மையான தர்க்கத்திற்கு இந்த பொறிமுறையைப் பயன்படுத்துவது கண்ணிவெடியில் நடப்பது போன்றது. வெளிப்படையான கட்டுப்பாடுகளில் ஒன்றைத் தாக்குவதன் மூலம் நீங்கள் எந்த நேரத்திலும் சுரங்கத்தைப் பெறலாம். இது எவ்வாறு இயங்குகிறது என்பதும் ஒரு தனி கேள்வி, ஆனால் அது இந்த கட்டுரையின் எல்லைக்கு அப்பாற்பட்டது.

Microsoft SQL சேவையகம்

கூடுதல் தேவைகள்

SET விருப்பங்கள் மற்றும் உறுதியான செயல்பாட்டுத் தேவைகளுக்கு கூடுதலாக, பின்வரும் தேவைகள் பூர்த்தி செய்யப்பட வேண்டும்:

  • செயல்படுத்தும் பயனர் CREATE INDEX பார்வைக்கு உரிமையாளராக இருக்க வேண்டும்.
  • நீங்கள் குறியீட்டை உருவாக்கும் போது, ​​தி IGNORE_DUP_KEY விருப்பம் ஆஃப் ஆக அமைக்கப்பட வேண்டும் (இயல்புநிலை அமைப்பு).
  • அட்டவணைகள் இரண்டு பகுதி பெயர்களால் குறிப்பிடப்பட வேண்டும், ஸ்கீமா.அட்டவணை பெயர் பார்வை வரையறையில்.
  • பார்வையில் குறிப்பிடப்பட்டுள்ள பயனர் வரையறுக்கப்பட்ட செயல்பாடுகள் ஐப் பயன்படுத்தி உருவாக்கப்பட வேண்டும் WITH SCHEMABINDING விருப்பம்.
  • பார்வையில் குறிப்பிடப்பட்ட எந்தவொரு பயனர் வரையறுக்கப்பட்ட செயல்பாடுகளும் இரண்டு பகுதி பெயர்களால் குறிப்பிடப்பட வேண்டும், ..
  • பயனர் வரையறுக்கப்பட்ட செயல்பாட்டின் தரவு அணுகல் பண்பு இருக்க வேண்டும் NO SQL, மற்றும் வெளிப்புற அணுகல் சொத்து இருக்க வேண்டும் NO.
  • பொதுவான மொழி இயக்க நேரம் (CLR) செயல்பாடுகள் பார்வையின் தேர்ந்தெடுக்கப்பட்ட பட்டியலில் தோன்றலாம், ஆனால் க்ளஸ்டர்டு இன்டெக்ஸ் கீயின் வரையறையின் பகுதியாக இருக்க முடியாது. CLR செயல்பாடுகள் பார்வையின் WHERE க்ளாஸ் அல்லது பார்வையில் ஒரு சேர் செயல்பாட்டின் ஆன் ஷரத்தில் தோன்ற முடியாது.
  • பார்வை வரையறையில் பயன்படுத்தப்படும் CLR செயல்பாடுகள் மற்றும் CLR பயனர் வரையறுக்கப்பட்ட வகைகளின் முறைகள் பின்வரும் அட்டவணையில் காட்டப்பட்டுள்ளபடி அமைக்கப்பட்ட பண்புகளைக் கொண்டிருக்க வேண்டும்.

    சொத்து
    குறிப்பு

    உறுதியான = உண்மை
    Microsoft .NET Framework முறையின் பண்புக்கூறாக வெளிப்படையாக அறிவிக்கப்பட வேண்டும்.

    துல்லியம் = உண்மை
    .NET Framework முறையின் பண்புக்கூறாக வெளிப்படையாக அறிவிக்கப்பட வேண்டும்.

    தரவு அணுகல் = SQL இல்லை
    DataAccessKind.None என DataAccess பண்புக்கூறு அமைப்பதன் மூலம் தீர்மானிக்கப்படுகிறது.

    வெளிப்புற அணுகல் = எண்
    இந்த சொத்து 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 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 அறிக்கையில் பின்வரும் பரிவர்த்தனை-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 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

அவுட்டர் ஜாயின்கள், யூனியன், ஆர்டர் ஆல் மற்றும் பிற தடைசெய்யப்பட்டுள்ளன. எதைப் பயன்படுத்தக் கூடாது என்பதைக் காட்டிலும் எதைப் பயன்படுத்தலாம் என்பதைக் குறிப்பிடுவது எளிதாக இருந்திருக்கலாம். பட்டியல் மிகவும் சிறியதாக இருக்கலாம்.

சுருக்கமாக: எல்ஜிபிஎல் தொழில்நுட்பத்தில் உள்ள ஒவ்வொரு (வணிக ரீதியாக கவனிக்கவும்) DBMS vs எதுவுமில்லை (ஒரு தர்க்கரீதியான, தொழில்நுட்பம் அல்ல) மிகப்பெரிய கட்டுப்பாடுகள். இருப்பினும், இந்த பொறிமுறையை தொடர்புடைய தர்க்கத்தில் செயல்படுத்துவது விவரிக்கப்பட்ட செயல்பாட்டு தர்க்கத்தை விட சற்று கடினமாக உள்ளது என்பதை கவனத்தில் கொள்ள வேண்டும்.

Реализация

எப்படி இது செயல்படுகிறது? PostgreSQL ஒரு "மெய்நிகர் இயந்திரமாக" பயன்படுத்தப்படுகிறது. வினவல்களை உருவாக்கும் சிக்கலான அல்காரிதம் உள்ளே உள்ளது. இங்கே மூல. மற்றும் ifs ஒரு கொத்து கொண்ட ஹூரிஸ்டிக்ஸ் ஒரு பெரிய தொகுப்பு இல்லை. எனவே, நீங்கள் படிக்க இரண்டு மாதங்கள் இருந்தால், நீங்கள் கட்டிடக்கலையைப் புரிந்துகொள்ள முயற்சி செய்யலாம்.

இது திறம்பட செயல்படுகிறதா? மிகவும் பயனுள்ள. துரதிர்ஷ்டவசமாக, இதை நிரூபிப்பது கடினம். பெரிய பயன்பாடுகளில் உள்ள ஆயிரக்கணக்கான வினவல்களை நீங்கள் கருத்தில் கொண்டால், சராசரியாக அவை ஒரு நல்ல டெவலப்பரை விட திறமையானவை என்று மட்டுமே என்னால் சொல்ல முடியும். ஒரு சிறந்த SQL புரோகிராமர் எந்த வினவலையும் மிகவும் திறமையாக எழுத முடியும், ஆனால் ஆயிரம் வினவல்களுடன் அதைச் செய்ய அவருக்கு உந்துதல் அல்லது நேரம் இருக்காது. செயல்திறனுக்கான ஆதாரமாக நான் இப்போது மேற்கோள் காட்டக்கூடிய ஒரே விஷயம் என்னவென்றால், இந்த DBMS இல் கட்டப்பட்ட மேடையில் பல திட்டங்கள் செயல்படுகின்றன. ஈஆர்பி அமைப்புகள், இது ஆயிரக்கணக்கான பயனர்கள் மற்றும் டெராபைட் தரவுத்தளங்களுடன் நூற்றுக்கணக்கான மில்லியன் பதிவுகளுடன் வழக்கமான இரண்டு-செயலி சேவையகத்தில் இயங்கும் ஆயிரக்கணக்கான வெவ்வேறு மெட்டீரியலைஸ்டு செயல்பாடுகளைக் கொண்டுள்ளது. இருப்பினும், பதிவிறக்குவதன் மூலம் எவரும் செயல்திறனை சரிபார்க்கலாம்/நிராகரிக்கலாம் நடைமேடை மற்றும் PostgreSQL, இயக்குகிறது SQL வினவல்களைப் பதிவுசெய்து, அங்குள்ள தர்க்கம் மற்றும் தரவை மாற்ற முயற்சிக்கிறது.

பின்வரும் கட்டுரைகளில், செயல்பாடுகளில் கட்டுப்பாடுகளை எவ்வாறு அமைக்கலாம், மாற்ற அமர்வுகளுடன் பணிபுரியலாம் மற்றும் பலவற்றைப் பற்றியும் பேசுவேன்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்