7.1 குறியீடுகள் தோன்றுவதற்கான காரணங்கள்

தரவுத்தளங்கள் இல்லாத மற்றொரு முக்கியமான விஷயம் குறியீடுகள்.

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

SELECT * FROM user WHERE level > 90

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

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

அருமை, ஆனால் 2020 க்கு முன் பதிவு செய்த தேதியை நாம் இப்போது தேர்ந்தெடுக்க வேண்டும் என்றால் என்ன செய்வது? பதிவு தேதியின்படி மீண்டும் வரிசைப்படுத்தி பைனரி தேடலைப் பயன்படுத்தவும்.

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

வெவ்வேறு துறைகளில் ஒரே நேரத்தில் வரிசைப்படுத்தப்பட்ட தரவை எவ்வாறு சேமிப்பது?

பதில் மிகவும் எளிதானது - நீங்கள் தரவுகளை அல்ல, அவற்றின் குறியீடுகளை சில உலகளாவிய அட்டவணையில் சேமிக்க வேண்டும்.

ஐடியுடன் 10 பயனர்கள் இருப்பதாக வைத்துக்கொள்வோம்: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

அவற்றை நிலை வாரியாக வரிசைப்படுத்த நீங்கள் முடிவு செய்கிறீர்கள், பின்னர் அவர்களின் ஐடியின் வரிசை இப்படி இருக்கும்: {9, 2, 3, 1, 5, 4, 8, 6, 7, 10}.

தேதியின்படி அவற்றை வரிசைப்படுத்தினால், எடுத்துக்காட்டாக: {10, 1, 8, 7, 2, 3, 5, 9, 6}.

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

இதை ஜாவா குறியீட்டில் மீண்டும் எழுதுகிறேன்:

List<String> list = List.of("A", "C", "B", "Z", "Cc", "Bb", "Zz", "Y");  //this is a list of objects
List<String> alphabeticsList = new ArrayList(list);
Collections.sort(alphabeticsList); //collection sorted alphabetically

List<String> lengthList = new ArrayList(list);
Collections.sort(lengthList, lengthComparator); //collection sorted by string length

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

மேலும் சில துறைகளுக்கான தேர்வுகளை அடிக்கடி செய்ய வேண்டியிருக்கும் போது, ​​டேபிளில் மற்றொரு குறியீட்டைச் சேர்த்து (ஜாவாவில் ஒரு புதிய சேகரிப்புக்கு ஒப்பானது) மற்றும் அட்டவணையின் வரிசைகளை வரிசைப்படுத்தி, அவற்றின் வரிசைப்படுத்தப்பட்ட வரிசையை ஒரு சிறப்பு குறியீட்டு கோப்பில் சேமிக்கிறோம்.

ஜாவா ஒப்பீடு கொஞ்சம் உதவியது என்று நம்புகிறேன். ஒரு சிறிய பயிற்சி - மற்றும் உங்களுக்கு, குறியீடுகளின் பயன்பாடு மிகவும் தெளிவான தீர்வாக மாறும்.

7.2 அட்டவணையில் குறியீடுகளைச் சேர்த்தல்

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

அட்டவணையில் ஒரு குறியீட்டைச் சேர்ப்பது மிகவும் எளிது:

ALTER TABLE table
    ADD INDEX index_name (column);

நீங்கள் ஒரே நேரத்தில் பல நெடுவரிசைகளில் பதிவுகளை அடிக்கடி தேடினால், நீங்கள் ஒரு கூட்டு குறியீட்டைக் குறிப்பிடலாம்: SQL அதை உருவாக்க பல நெடுவரிசைகளைப் பயன்படுத்துகிறது.

அட்டவணையில் ஒரு கூட்டு குறியீட்டைச் சேர்ப்பதும் மிகவும் எளிது:

ALTER TABLE table
    ADD INDEX index_name (column 1, column 2, column 3, ...);

குறியீடுகள் அதிக வட்டு இடத்தை எடுத்துக்கொள்கின்றன, எனவே உங்களுக்கு இனி குறியீட்டு தேவையில்லை என்றால், நீங்கள் அதை எப்போதும் அகற்றலாம்:

ALTER TABLE table
    DROP INDEX index_name;

குறியீடுகள் தரவுத்தளத்தின் மிகவும் மறைக்கப்பட்ட பகுதியாகும். வினவல்களை எழுதும் வடிவத்தை அவை எந்த வகையிலும் பாதிக்காது. அவற்றின் இருப்பு தரவு மாதிரியை விரைவுபடுத்துகிறது மற்றும் அவற்றின் சேர்த்தல் மற்றும் காப்புப்பிரதியை மெதுவாக்குகிறது.

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