දත්ත සමුදා සුචිගත කිරීම ක්‍රියා කරන්නේ කෙසේද? [වසා ඇත]


2422

ඔබේ දත්ත කට්ටලය ප්‍රමාණයෙන් වැඩි වන විට සුචිගත කිරීම එතරම් වැදගත් වන හෙයින්, දත්ත සමුදාය-අ nost ෙයවාදී මට්ටමින් සුචිගත කිරීම ක්‍රියා කරන ආකාරය යමෙකුට පැහැදිලි කළ හැකිද?

ක්ෂේත්‍රයක් සුචිගත කිරීම සඳහා විමසීම් පිළිබඳ තොරතුරු සඳහා, දත්ත සමුදා තීරුවක් සුචිගත කරන්නේ කෙසේදැයි බලන්න .

Answers:


3557

එය අවශ්‍ය වන්නේ ඇයි?

තැටි මත පදනම් වූ ගබඩා උපාංගවල දත්ත ගබඩා කළ විට, එය දත්ත කොටස් ලෙස ගබඩා වේ. මෙම කුට්ටි සම්පුර්ණයෙන්ම ප්‍රවේශ වන අතර ඒවා පරමාණුක තැටි ප්‍රවේශ මෙහෙයුම බවට පත් කරයි. තැටි කුට්ටි ව්‍යුහගත කර ඇත්තේ සම්බන්ධිත ලැයිස්තු වලට සමානය. දෙකම දත්ත සඳහා කොටසක්, ඊළඟ නෝඩයේ (හෝ බ්ලොක්) පිහිටීම සඳහා දර්ශකයක් අඩංගු වන අතර, දෙකම එකවර ගබඩා කිරීම අවශ්‍ය නොවේ.

වාර්තා ගණනාවක් එක් ක්ෂේත්‍රයක පමණක් වර්ග කළ හැකි බැවින්, වර්ග කළ නොහැකි ක්ෂේත්‍රයක් සෙවීම සඳහා රේඛීය සෙවීමක් අවශ්‍ය වන අතර එමඟින් N/2වාරණ ප්‍රවේශයන් අවශ්‍ය වේ (සාමාන්‍යයෙන්), කොහේද වාරණ Nගණන මේසය විහිදේ. එම ක්ෂේත්‍රය යතුරු නොවන ක්ෂේත්‍රයක් නම් (එනම් අද්විතීය ඇතුළත් කිරීම් අඩංගු නොවේ) එවිට මුළු වගුව Nවාරණ ප්‍රවේශයන් තුළ සෙවිය යුතුය .

වර්ග කළ ක්ෂේත්‍රයක් සමඟ, ද්විමය සෙවුමක් භාවිතා කළ හැකිය, එයට log2 Nවාරණ ප්‍රවේශයන් ඇත. යතුරු නොවන ක්ෂේත්‍රයක් ලබා දී දත්ත වර්ග කර ඇති හෙයින්, ඉහළ අගයක් සොයාගත් පසු ඉතිරි වගුවේ අනුපිටපත් අගයන් සෙවීම අවශ්‍ය නොවේ. මේ අනුව කාර්ය සාධනය වැඩි කිරීම සැලකිය යුතු ය.

සුචිගත කිරීම යනු කුමක්ද?

සුචිගත කිරීම යනු විවිධ ක්ෂේත්‍රයන්හි වාර්තා ගණනාවක් වර්ග කිරීමේ ක්‍රමයකි. වගුවක ඇති ක්ෂේත්‍රයක දර්ශකයක් නිර්මාණය කිරීමෙන් ක්ෂේත්‍ර අගය රඳවා ඇති තවත් දත්ත ව්‍යුහයක් නිර්මාණය වන අතර එය සම්බන්ධ වාර්තාවට දර්ශකයක් ද වේ. මෙම දර්ශක ව්‍යුහය පසුව වර්ග කර ඇති අතර එමඟින් ද්විමය සෙවීම් සිදු කිරීමට ඉඩ ලබා දේ.

සුචිගත කිරීමේ අවාසිය නම්, දර්ශක මයිසෑම් එන්ජිම භාවිතයෙන් වගුවක එකට ගබඩා කර ඇති බැවින් මෙම දර්ශකවලට තැටියේ අමතර ඉඩක් අවශ්‍ය වන අතර, එකම වගුව තුළ ඇති බොහෝ ක්ෂේත්‍ර සුචිගත කර ඇත්නම්, මෙම ගොනුවට යටින් පවතින ගොනු පද්ධතියේ ප්‍රමාණයේ සීමාවන් ඉක්මණින් ළඟා විය හැකිය. .

එය ක්‍රියාත්මක වන්නේ කෙසේද?

පළමුව, නියැදි දත්ත සමුදා වගු සැලැස්මක් ගෙනහැර දක්වමු;

ක්ෂේත්‍ර නාමය දත්ත වර්ගය තැටියේ ප්‍රමාණය
id (ප්‍රාථමික යතුර) අත්සන් නොකළ INT 4 බයිට්
firstName Char (50) බයිට් 50 යි
lastName Char (50) බයිට් 50 යි
emailAddress Char (100) බයිට් 100

සටහන : තැටියේ වටිනාකම මත නිවැරදි ප්‍රමාණයකට ඉඩ දීම සඳහා වර්චර් වෙනුවට වර්‍ගය භාවිතා කරන ලදී. මෙම නියැදි දත්ත ගබඩාවේ පේළි මිලියන පහක් අඩංගු වන අතර එය වෙන් නොකෙරේ. විමසුම් කිහිපයක ක්‍රියාකාරිත්වය දැන් විශ්ලේෂණය කෙරේ. මේවා හැඳුනුම්පත (වර්ග කළ යතුරු ක්ෂේත්‍රය) සහ පළමු නම භාවිතා කරන විමසුමකි (යතුරු නොවන වර්ගීකරණය නොකළ ක්ෂේත්‍රයක්).

උදාහරණ 1 - වර්ගීකරණය නොකළ ක්ෂේත්‍ර වලට අනුව වර්ග කර ඇත

r = 5,000,000ස්ථාවර ප්‍රමාණයේ වාර්තා වල නියැදි දත්ත ගබඩාවට අනුව , R = 204බයිට් ගණනක දිගක් ලබා දෙන අතර ඒවා පෙරනිමි වාරණ ප්‍රමාණයේ B = 1,024බයිට් භාවිතා කරන MyISAM එන්ජිම භාවිතා කරමින් වගුවක ගබඩා කර ඇත . වගුවේ අවහිර කිරීමේ සාධකය bfr = (B/R) = 1024/204 = 5තැටි කොටසකට වාර්තා වේ. වගුව රඳවා තබා ගැනීමට අවශ්‍ය මුළු කුට්ටි ගණන කුට්ටි වේ N = (r/bfr) = 5000000/5 = 1,000,000.

හැඳුනුම් ක්ෂේත්‍රය ප්‍රධාන ක්ෂේත්‍රයක් බැවින්, හැඳුනුම් ක්ෂේත්‍රයෙහි රේඛීය N/2 = 500,000සෙවුමකට අගයක් සොයා ගැනීමට සාමාන්‍යයෙන් වාරණ ප්‍රවේශයන් අවශ්‍ය වේ . හැඳුනුම් ක්ෂේත්‍රය ද වර්ග කර ඇති හෙයින්, සාමාන්‍යයෙන් log2 1000000 = 19.93 = 20වාරණ ප්‍රවේශයන් අවශ්‍ය වන ද්විමය සෙවුමක් කළ හැකිය . ක්ෂණිකව අපට පෙනෙන්නේ මෙය විශාල දියුණුවක් බවයි.

දැන් පළමු නම ක්ෂේත්‍රය වර්ග කර හෝ ප්‍රධාන ක්ෂේත්‍රයක් නොවේ, එබැවින් ද්විමය සෙවීමක් කළ නොහැකි අතර අගයන් අද්විතීය නොවේ, එබැවින් වගුවට නිශ්චිත N = 1,000,000වාරණ ප්‍රවේශයන් සඳහා අවසානය දක්වා සෙවීම අවශ්‍ය වේ . සුචිගත කිරීම නිවැරදි කිරීම අරමුණු කරන්නේ මෙම තත්වයයි.

දර්ශක වාර්තාවක අඩංගු වන්නේ සුචිගත කළ ක්ෂේත්‍රයක් සහ මුල් වාර්තාවට දර්ශකයක් පමණක් බැවින් එය පෙන්වා දෙන බහු-ක්ෂේත්‍ර වාර්තාවට වඩා එය කුඩා වනු ඇත. එබැවින් දර්ශකයට මුල් වගුවට වඩා අඩු තැටි කොටස් අවශ්‍ය වන අතර එමඟින් නැවත වාරණය කිරීම සඳහා වාරණ ප්‍රවේශයන් අඩු වේ. පළමු නම ක්ෂේත්‍රයේ දර්ශකයක් සඳහා වන යෝජනා ක්‍රමය පහත දැක්වේ;

ක්ෂේත්‍ර නාමය දත්ත වර්ගය තැටියේ ප්‍රමාණය
firstName Char (50) බයිට් 50 යි
(පටිගත කිරීමේ දර්ශකය) විශේෂ බයිට් 4 ක්

සටහන : MySQL හි දර්ශකයන් වගුවේ ප්‍රමාණය අනුව දිග බයිට් 2, 3, 4 හෝ 5 කි.

උදාහරණ 2 - සුචිගත කිරීම

සුපුරුදු වාරණ ප්‍රමාණයේ බයිට් භාවිතා කරමින් r = 5,000,000දර්ශක වාර්තාගත දිගක් සහිත අපගේ නියැදි දත්ත ගබඩාව ලබා දී ඇත . දර්ශකයේ අවහිර කිරීමේ සාධකය තැටි කොටසකට වාර්තා වේ. දර්ශකය රඳවා ගැනීමට අවශ්‍ය මුළු කුට්ටි ගණන කුට්ටි වේ .R = 54B = 1,024bfr = (B/R) = 1024/54 = 18N = (r/bfr) = 5000000/18 = 277,778

දැන් පළමු නම ක්ෂේත්‍රය භාවිතා කර සෙවීම මඟින් කාර්ය සාධනය වැඩි කිරීමට දර්ශකය භාවිතා කළ හැකිය. සාමාන්‍යයෙන් log2 277778 = 18.08 = 19වාරණ ප්‍රවේශයන් සහිත දර්ශකයේ ද්විමය සෙවීමක් සඳහා මෙය ඉඩ දෙයි . සත්‍ය වාර්තාවේ ලිපිනය සොයා ගැනීම සඳහා, කියවීමට තවත් වාරණ ප්‍රවේශයක් අවශ්‍ය වන අතර, මුළු එකතුව 19 + 1 = 20අවහිර කිරීම සඳහා ගෙන එනු ලැබේ, සුචිගත නොකළ වගුවේ පළමු නම ගැලපීමක් සොයා ගැනීමට අවශ්‍ය වාරණ ප්‍රවේශයන් 1,000,000 ට වඩා cry ත හ cry කි .

එය භාවිතා කළ යුත්තේ කවදාද?

දර්ශකයක් නිර්මාණය කිරීම සඳහා අමතර තැටි අවකාශයක් අවශ්‍ය බව සලකන විට (ඉහත උදාහරණයෙන් බ්ලොක් 277,778 ක් වැඩිපුර, ~ 28% වැඩි වීමක්), සහ බොහෝ දර්ශක මඟින් ගොනු පද්ධති ප්‍රමාණයේ සීමාවන් නිසා පැන නගින ගැටලු ඇති විය හැකි බැවින්, නිවැරදි දේ තෝරා ගැනීමට ප්‍රවේශමෙන් සිතා බැලිය යුතුය. ක්ෂේත්‍ර දර්ශකයට.

දර්ශක භාවිතා කරනුයේ වාර්තා තුළ ගැලපෙන ක්ෂේත්‍රයක් සෙවීම වේගවත් කිරීම සඳහා පමණක් වන බැවින්, ප්‍රතිදානය සඳහා පමණක් භාවිතා කරන සුචිගත කිරීමේ ක්ෂේත්‍ර හුදෙක් ඇතුළත් කිරීමේ හෝ මකාදැමීමේ ක්‍රියාවලියක් සිදු කරන විට තැටි අවකාශය හා සැකසුම් කාලය නාස්ති කිරීමක් වනු ඇත. වැළකී සිටිය යුතුය. ද්විමය සෙවුමක ස්වභාවය අනුව, දත්තවල කාර්දිනල්භාවය හෝ සුවිශේෂත්වය වැදගත් වේ. 2 ක කාඩිනලිටි සහිත ක්ෂේත්‍රයක් මත සුචිගත කිරීමෙන් දත්ත අඩකින් බෙදෙන අතර 1,000 ක කාර්දිනල් එකක් මඟින් වාර්තා 1,000 ක් පමණ ආපසු ලබා දෙනු ඇත. එතරම් අඩු කාර්දිනල් භාවයක් සමඟ effectiveness ලදායීතාවය රේඛීය වර්ග කිරීමකට අඩු වන අතර, කාර්ඩිනල්තාව වාර්තාගත සංඛ්‍යාවෙන් 30% ට වඩා අඩු නම් විමසුම් ප්‍රශස්තකරණය මඟින් දර්ශකය භාවිතා කිරීමෙන් වැළකී සිටිනු ඇත.


8
දත්ත අද්විතීය වූ විට ද්විමය සෙවීම කළ හැකිය, මම හරිද? අවම කාර්දිනල් බව වැදගත් බව ඔබ සඳහන් කළද, ඇල්ගොරිතම සරල ද්විමය සෙවීමක් නොවනු ඇත, මෙම ආසන්න කිරීම (~ log2 n) ක්‍රියාවලි වේලාවට බලපාන්නේ කෙසේද?
ෂැම්පූ

9
@ අභිෂේක් ශිව්කුමාර්: නියම ප්‍රශ්නය! දත්ත වගුවේ ඇති තරම් දර්ශක වගුවට පේළි තරම් ප්‍රමාණයක් ඇතැයි මම සිතමි. මෙම ක්ෂේත්‍රයට ඇත්තේ අගයන් 2 ක් පමණි (සත්‍ය / අසත්‍යය සහිත බූලියන්) සහ ඔබට සත්‍ය වටිනාකමක් සහිත වාර්තාවක් අවශ්‍ය යැයි පවසන විට, ඔබට කළ හැක්කේ පළමු මුරපදයේ ඇති ප්‍රති result ලයෙන් අඩක් පමණි, දෙවන වරට ඔබගේ සියලුම වාර්තා වල වටිනාකම සත්‍ය වන බැවින් වෙන්කර හඳුනා ගැනීමට කිසිදු පදනමක් නැත, දැන් ඔබට දත්ත වගුව රේඛීය ආකාරයෙන් සෙවිය යුතුය - එබැවින් සුචිගත කළ තීරුව තීරණය කිරීමේදී කාර්දිනල් බව සලකා බැලිය යුතු බව ඔහු පැවසීය. මෙම අවස්ථාවේ දී, එවැනි තීරුවක සුචිගත කිරීම නිෂ් less ල ය. මම නිවැරදියි කියා සිතමි :)
සෞරබ් පටිල්

7
සාමාන්‍ය නඩුවේ වාරණ ප්‍රවේශ ගණන නොවිය යුතුය (N+1)/2. අපි හැකි සියලු අවස්ථා සඳහා වාරණ ප්රවේශය සංඛ්යාව කළොත්, හා රෝගීන් සංඛ්යාව විසින් එය බෙදා වෙන් නම්, එවිට අපිට N*(N+1)/(2*n)වීමට සිදු එන (N+1)/2.
අජේ

31
මෙම පිළිතුරෙහි යතුරු ලියනයක ස්වල්පයක් ඇතැයි මම සිතමි, උදාහරණයක් ලෙස, වාක්‍යයේ: "සුචිගත නොකළ වගුවට අවශ්‍ය වාරණ ප්‍රවේශයන් 277,778 ට වඩා cry ත හ cry කි." කතුවරයා අදහස් කරන්නේ අවහිර කිරීම් 1,000,000 ක් නොවේද? 277,778 යනු දර්ශකයටම අවශ්‍ය වන කුට්ටි ගණනයි. තවත් සාවද්‍යතාවයන් කිහිපයක් ද ඇති බව පෙනේ :(
jcm

5
cjcm ඔහු එය "සුචිගත කිරීම යනු කුමක්ද" යන කොටසේ විස්තර කළේය - "සුචිගත කිරීම යනු විවිධ ක්ෂේත්‍රයන්හි වාර්තා ගණනාවක් වර්ග කිරීමේ ක්‍රමයකි. වගුවක ක්ෂේත්‍රයක් මත දර්ශකයක් නිර්මාණය කිරීම මඟින් ක්ෂේත්‍ර අගය සහ දර්ශකය සහිත තවත් දත්ත ව්‍යුහයක් නිර්මාණය කරයි. එය සම්බන්ධ වාර්තාවට. මෙම දර්ශක ව්‍යුහය පසුව වර්ග කර ඇති අතර එමඟින් ද්විමය සෙවීම් සිදු කිරීමට ඉඩ ලබා දේ.
ග්‍රින්ච්

300

සම්භාව්‍ය උදාහරණය "පොත් වල දර්ශකය"

පිටු 1000 කින් යුත් “පොතක්” සලකා බලන්න, පරිච්ඡේද 10 කින් බෙදනු ලැබේ, සෑම කොටසක්ම පිටු 100 කින් යුක්ත වේ.

සරලයි, හාහ්?

දැන්, " ඇල්කෙමිස්ට් " යන වචනය අඩංගු විශේෂිත පරිච්ඡේදයක් සොයා ගැනීමට ඔබට අවශ්‍ය යැයි සිතන්න . දර්ශක පිටුවක් නොමැතිව, ඔබට සම්පූර්ණ පොත / පරිච්ඡේද පරිලෝකනය කිරීම හැර වෙනත් විකල්පයක් නොමැත. එනම්: පිටු 1000 යි.

දත්ත සමුදා ලෝකයේ මෙම ප්‍රතිසම "පූර්ණ වගු පරිලෝකනය" ලෙස හැඳින්වේ .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

නමුත් දර්ශක පිටුවක් සමඟ, ඔබ යා යුත්තේ කොතැනටදැයි ඔබ දන්නවා! එපමණක් නොව, වැදගත් වන ඕනෑම විශේෂිත පරිච්ඡේදයක් සොයා බැලීමට, ඔබ සෑම විටම දර්ශක පිටුව දෙස නැවත නැවතත් බැලිය යුතුය. ගැලපෙන දර්ශකය සොයා ගැනීමෙන් පසු, ඉතිරි කොටස මඟ හැරීමෙන් ඔබට එම පරිච්ඡේදයට කාර්යක්ෂමව යා හැකිය.

නමුත් සත්‍ය පිටු 1000 ට අමතරව, දර්ශක පෙන්වීමට ඔබට තවත් පිටු 10 ක් අවශ්‍ය වනු ඇත, එබැවින් සම්පූර්ණයෙන්ම පිටු 1010 කි.

මේ අනුව, දර්ශකය යනු වෙනම කොටසකි, සුචිගත කළ තීරුවේ + දර්ශකයේ අගයන් සුචිගත කළ පේළියට කාර්යක්ෂමව බැලීම සඳහා වර්ග කළ අනුපිළිවෙලකට ගබඩා කරයි.

පාසල්වල දේවල් සරලයි නේද? : පී


24
ඇත්තෙන්ම හොඳ ප්‍රතිසමයක්! විහිලු මම පොත් දර්ශකයක් සහ ඩීබී දර්ශකයක් අතර සම්බන්ධතාවය ඇති කළේ නැත
යොලෝ වෝ

2
මෙය මා සිතන්නේ Libraryහෝ Grocery Store සිල්ලර වෙළඳසැලක දර්ශකයක් නොමැති බව ඔබට සිතිය හැකිද? Where's The Beef?!? Oh its next to the Restrooms, a mop, and makeup
ජයරිසෝ

3
"නමුත් ආරම්භයේ දී දර්ශක පිටුවක් සමඟ, ඔබ එහි සිටී." "ඔබ එහි සිටී" යන්නෙන් අදහස් කරන්නේ කුමක්ද?
Frisbetarian

2
දර්ශක සාමාන්‍යයෙන් පොත් පිටුපසින් යන අතර අන්තර්ගත වගුවක් ඉදිරියෙන් යයි. තීරු අනුපිළිවෙල වැදගත් නොවිය යුතු බැවින්, එය ප්‍රතිසමතාව වඩාත් යහපත් කරයි.
undrline කරන්න

1
ඔබේ පැහැදිලි කිරීම ඉතා පහසුය. අනෙක් අය දේවල් පැහැදිලි කිරීම සඳහා නවීන වචන භාවිතා කිරීමට නැඹුරු වෙති. මම එකකට වඩා වැඩි ගණනක් ලබා දිය හැකි යැයි සිතමි.
emeraldhieu

241

පළමු වරට මෙය කියවූ විට එය මට බෙහෙවින් උපකාරී විය. ඔබට ස්තුතියි.

එතැන් සිට මම දර්ශක සෑදීමේ අවාසිය ගැන යම් අවබෝධයක් ලබා ගතිමි: ඔබ එක් දර්ශකයක් සමඟ වගුවකට ( UPDATEහෝ INSERT) ලිවුවහොත්, ඇත්ත වශයෙන්ම ඔබට ගොනු පද්ධතියේ ලිවීමේ මෙහෙයුම් දෙකක් තිබේ. එකක් වගු දත්ත සඳහා වන අතර තවත් එකක් දර්ශක දත්ත සඳහා (සහ එය භාවිතා කිරීම (සහ - පොකුරු නම් - වගු දත්ත නැවත ලබා ගැනීම)). වගුව සහ දර්ශකය එකම දෘඩ තැටියක පිහිටා තිබේ නම් මේ සඳහා වැඩි කාලයක් වැය වේ. මේ අනුව දර්ශකයක් (ගොඩවල්) නොමැති වගුවක් ඉක්මණින් ලිවීමේ මෙහෙයුම් සඳහා ඉඩ ලබා දේ. (ඔබට දර්ශක දෙකක් තිබේ නම් ඔබ ලිවීමේ මෙහෙයුම් තුනකින් අවසන් වනු ඇත, සහ එසේ ය)

කෙසේ වෙතත්, දර්ශක දත්ත සහ වගු දත්ත සඳහා විවිධ දෘඩ තැටි දෙකක විවිධ ස්ථාන දෙකක් නිර්වචනය කිරීමෙන් කාලය වැඩි වීමේ ගැටළුව අඩු කිරීමට / ඉවත් කිරීමට හැකිය. මේ සඳහා අපේක්ෂිත දෘඩ තැටිවල ඇති ගොනු සහිත අතිරේක ගොනු කණ්ඩායම් අර්ථ දැක්වීම සහ අවශ්‍ය පරිදි වගු / දර්ශක පිහිටීම අර්ථ දැක්වීම අවශ්‍ය වේ.

දර්ශක සමඟ ඇති තවත් ගැටළුවක් වන්නේ දත්ත ඇතුළු කරන විට කාලයත් සමඟ ඒවායේ ඛණ්ඩනය වීමයි. REORGANIZEඋදව් කරයි, එය සිදු කිරීම සඳහා ඔබ චර්යාවන් ලිවිය යුතුය.

සමහර අවස්ථා වලදී, දර්ශක සහිත වගුවකට වඩා ගොඩවල් උපකාරී වේ,

උදා: - ඔබට ප්‍රතිවාදී ලිපි රාශියක් තිබේ නම්, නමුත් වාර්තා කිරීම සඳහා ව්‍යාපාරික වේලාවෙන් පිටත කියවන්නේ එක් රාත්‍රියක් පමණි.

එසේම, පොකුරු සහ පොකුරු නොවන දර්ශක අතර වෙනස තරමක් වැදගත් වේ.

මට උදව් කළා: - පොකුරු සහ පොකුරු නොවන දර්ශකය ඇත්ත වශයෙන්ම අදහස් කරන්නේ කුමක්ද?


3
මාස්ටර් සහ ස්ලේව් මෙන්ම වෙනස් දත්ත සමුදායන් දෙකක් පවත්වා ගැනීමෙන් මෙම සුචිගත කිරීමේ ගැටළු විසඳිය හැකි යැයි මම සිතමි. වාර්තා ඇතුළත් කිරීමට හෝ යාවත්කාලීන කිරීමට මාස්ටර් භාවිතා කළ හැකි ස්ථාන. සුචිගත කිරීමකින් තොරව. නිසි සුචිගත කිරීමකින් කියවීමට දාසයා භාවිතා කළ හැකිද ???
භාරතේෂ්

14
නෑ, වැරදියි, සමාවෙන්න. වගු වල අන්තර්ගතය පමණක් නොව, දර්ශක ව්‍යුහය සහ අන්තර්ගතය (b-tree, nodes) යාවත්කාලීන කළ යුතුය. ඔබේ ස්වාමියා සහ දාසයා පිළිබඳ සංකල්පය මෙහි තේරුමක් නැත. කළ හැකි දෙය නම් පළමු දත්ත ගබඩාවෙන් එම කාර්ය භාරය ඉවතට ගැනීම සඳහා විශ්ලේෂණ සිදු වන දෙවන දත්ත ගබඩාවට අනුකරණය කිරීම හෝ පිළිබිඹු කිරීමයි. එම දෙවන දත්ත ගබඩාවේ දත්තවල පිටපත් සහ දර්ශක එම දත්තවල අඩංගු වේ.
ඩර් යූ

3
ඔව් ...! මගේ අදහස කියවා එය නිසි ලෙස තේරුම් ගැනීමට උත්සාහ කරන්න. මාස්ටර් සහ දාසයා (කුමක් වුවත්) “පළමු දත්ත ගබඩාවෙන් එම කාර්ය භාරය ඉවතට ගැනීම සඳහා විශ්ලේෂණ සිදු වන දෙවන දත්ත සමුදායක් නිරූපණය කිරීම හෝ පිළිබිඹු කිරීම” ලෙසද මම සඳහන් කළෙමි. එම දත්ත "
භාරතේෂ්

6
දෙවන දත්ත සමුදාය - දර්පණය කිරීම හෝ අනුකරණය කිරීම සිදු කරන දාසයා - පළමු දත්ත මෙන් සියලු දත්ත හැසිරවීම් අත්විඳිනු ඇත. එක් එක් ඩීඑම්එල්-මෙහෙයුම සමඟ එම දෙවන දත්ත ගබඩාවේ ඇති දර්ශක "මෙම සුචිගත කිරීමේ ගැටළු" අත්විඳිනු ඇත. ඉක්මන් විශ්ලේෂණය සඳහා දර්ශක අවශ්‍ය වන සහ ඒවා යාවත්කාලීනව තබා ගත යුතු තැනක එහි ලාභය මා දකින්නේ නැත.
Der U

231

දර්ශකයක් යනු දත්ත ව්‍යුහයක් පමණක් වන අතර එය දත්ත සමුදායක නිශ්චිත තීරුවක් සෙවීම වේගවත් කරයි. මෙම ව්‍යුහය සාමාන්‍යයෙන් බී-ගසක් හෝ හැෂ් වගුවක් වන නමුත් එය වෙනත් ඕනෑම තර්කන ව්‍යුහයක් විය හැකිය.


30
මෙම පිළිතුර සඳහා මිලියනයකට +1 ගුණයක්, සුචිගත කිරීම යනු කුමක්ද යන්න පිළිබඳ සරල පැහැදිලි කිරීමක් සොයා ගැනීමට උත්සාහ කරන අතරතුර මෙම ලැයිස්තුගත කිරීම මට හමු විය.
ජොෂ් බර්සන්

1
"දත්ත ව්‍යුහයක්" යන්නෙන් "දත්ත වලට අතිරේක" යන්නෙන් අදහස් නොවන බව අපි සටහන් කරමු. සමහර විට එය (උදා: "පොකුරු නොවන දර්ශකය"), සමහර විට එය දත්ත සැකැස්ම තීරණය කරයි (උදා: "පොකුරු දර්ශකය").
පැබ්ලෝ එච්

164

දැන් අපි කියමු, 'ඒබීසී' ලෙස නම් කර ඇති ඕනෑම සේවකයකුගේ සියලු තොරතුරු සොයා ගැනීමට විමසුමක් ක්‍රියාත්මක කිරීමට අපට අවශ්‍යද?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

දර්ශකයක් නොමැතිව කුමක් සිදුවේද?

දත්ත සමුදා මෘදුකාංගයට සේවක වගුවේ ඇති සෑම පේළියක්ම බැලීමට අවශ්‍ය වන්නේ එම පේළිය සඳහා සේවක නාමය 'ඒබීසී' ද යන්නයි. තවද, සෑම පේළියක්ම 'ඒබීසී' යන නම සහිතව අපට අවශ්‍ය නිසා, අපට 'ඇබ්සී' යන නම සහිත එක් පේළියක් සොයාගත් වහාම බැලීම නතර කළ නොහැක, මන්ද ඒබීසී යන නම සහිත වෙනත් පේළි තිබිය හැකි බැවිනි . එබැවින්, අවසාන පේළිය දක්වා සෑම පේළියක්ම සෙවිය යුතුය - එයින් අදහස් වන්නේ මෙම අවස්ථාවෙහි පේළි දහස් ගණනක් දත්ත ගබඩාව විසින් 'ඇබ්සී' යන නම සහිත පේළි සොයා ගැනීමට සිදු වන බවයි. මෙය සම්පූර්ණ වගු පරිලෝකනය ලෙස හැඳින්වේ

දත්ත සමුදා දර්ශකයක් ක්‍රියාකාරීත්වයට උපකාරී වන්නේ කෙසේද

දර්ශකයක් තිබීමේ සමස්ත කරුණ නම්, සෙවිය යුතු ප්‍රශ්න වගුවක ඇති වාර්තා / පේළි ගණන අඩු කිරීමෙන් සෙවුම් විමසුම් වේගවත් කිරීමයි. දර්ශකයක් යනු වගුවක නිශ්චිත තීරුවක් සඳහා අගයන් ගබඩා කරන දත්ත ව්‍යුහයකි (බොහෝ විට බී ගසක්).

බී-ගස් දර්ශකය ක්‍රියා කරන්නේ කෙසේද?

B- ගස් දර්ශක සඳහා වඩාත්ම ජනප්‍රිය දත්ත ව්‍යුහය වීමට හේතුව ඒවා කාලය කාර්යක්ෂම වීම නිසාය - මන්දයත් බැලීම, මකා දැමීම සහ ඇතුළත් කිරීම් සියල්ලම ල ar ු ගණක වේලාවෙන් කළ හැකි බැවිනි. තවද, B- ගස් බහුලව භාවිතා වන තවත් ප්‍රධාන හේතුවක් වන්නේ B- ගස තුළ ගබඩා කර ඇති දත්ත වර්ග කළ හැකි බැවිනි. RDBMS සාමාන්‍යයෙන් තීරණය කරන්නේ දර්ශකයක් සඳහා සත්‍ය වශයෙන්ම භාවිතා කරන්නේ කුමන දත්ත ව්‍යුහයද යන්නයි. එහෙත්, සමහර ආර්ඩීබීඑම්එස් සමඟ ඇති සමහර අවස්ථා වලදී, ඔබ දර්ශකය නිර්මාණය කරන විට ඔබේ දත්ත සමුදාය භාවිතා කිරීමට අවශ්‍ය දත්ත ව්‍යුහය නියම කළ හැකිය.

හැෂ් වගු දර්ශකය ක්‍රියා කරන්නේ කෙසේද?

හැෂ් දර්ශක භාවිතා කිරීමට හේතුව වන්නේ හුදෙක් අගයන් සොයා බැලීමේදී හැෂ් වගු අතිශයින්ම කාර්යක්ෂම වීමයි. එබැවින්, නූලකට සමානාත්මතාවය සඳහා සංසන්දනය කරන විමසීම් මඟින් හැෂ් දර්ශකයක් භාවිතා කරන්නේ නම් ඉතා ඉක්මණින් අගයන් ලබා ගත හැකිය.

උදාහරණයක් ලෙස, අප කලින් සාකච්ඡා කළ විමසුම සේවක නාම නාම තීරුවේ සාදන ලද හැෂ් දර්ශකයකින් ප්‍රයෝජන ගත හැකිය. හැෂ් දර්ශකයක් ක්‍රියා කරන ආකාරය නම්, තීරු අගය හැෂ් වගුවට යතුර වන අතර එම යතුරට සිතියම් ගත කළ සත්‍ය අගය වගුවේ ඇති පේළි දත්ත වෙත යොමු කිරීමක් වනු ඇත. හැෂ් වගුව මූලික වශයෙන් සහායක අරා බැවින්, සාමාන්‍ය ප්‍රවේශයක් “Abc => 0x28939 like වැනි ය, 0x28939 යනු Abc මතකයේ ගබඩා කර ඇති වගු පේළියට යොමු දැක්වීමකි. හෑෂ් වගු දර්ශකයක “ඒබීසී” වැනි අගයක් සොයා ගැනීම සහ මතකයේ ඇති පේළිය වෙත යොමු කිරීමක් ලබා ගැනීම පැහැදිලිවම වගුව පරිලෝකනය කිරීමට වඩා බොහෝ වේගවත් වේ.

හැෂ් දර්ශකයක අවාසි

හැෂ් වගු වර්ගීකරණය කරන ලද දත්ත ව්‍යුහයන් නොවන අතර, හැෂ් දර්ශකවලට පවා උදව් කළ නොහැකි බොහෝ ආකාරයේ විමසුම් තිබේ. නිදසුනක් වශයෙන්, ඔබට වයස අවුරුදු 40 ට අඩු සියලුම සේවකයින් සොයා ගැනීමට අවශ්‍ය යැයි සිතමු. හැෂ් වගු දර්ශකයක් සමඟ ඔබ එය කරන්නේ කෙසේද? හොඳයි, එය කළ නොහැක්කේ හැෂ් වගුවක් යතුරු අගයන් සොයා බැලීමට පමණක් හොඳ නිසා - එයින් අදහස් වන්නේ සමානාත්මතාවය පරීක්ෂා කරන විමසුම්

දත්ත සමුදා දර්ශකයක් තුළ හරියටම කුමක්ද? ඉතින්, දැන් ඔබ දන්නවා වගුවක තීරුවක දත්ත සමුදා දර්ශකයක් නිර්මාණය වී ඇති බවත්, එම දර්ශකය එම නිශ්චිත තීරුවේ අගයන් ගබඩා කරන බවත්. එහෙත්, දත්ත සමුදා දර්ශකයක් එකම වගුවේ අනෙක් තීරුවල අගයන් ගබඩා නොකරන බව වටහා ගැනීම වැදගත්ය. උදාහරණයක් ලෙස, අපි සේවක නාම නාම තීරුවේ දර්ශකයක් සාදන්නේ නම්, මෙයින් අදහස් කරන්නේ සේවක_ඒජ් සහ සේවක_අඩ්‍රස් තීරු අගයන් ද දර්ශකයේ ගබඩා නොවන බවයි. අපි අනෙක් සියලුම තීරු දර්ශකයේ ගබඩා කර ඇත්නම්, එය හරියට මුළු වගුවේම තවත් පිටපතක් සෑදීම හා සමාන වනු ඇත - එය වැඩි ඉඩ ප්‍රමාණයක් ගන්නා අතර ඉතා අකාර්යක්ෂම වනු ඇත.

දර්ශකයක් භාවිතා කළ යුත්තේ කවදාදැයි දත්ත සමුදායක් දන්නේ කෙසේද? “සේවකයා වෙතින් තෝරාගන්න * සේවක_නාමය = 'ඒබීසී'” වැනි විමසුමක් ක්‍රියාත්මක වන විට, දත්ත තීරුව මඟින් විමසනු ලබන තීරුවේ (න්) දර්ශකයක් තිබේදැයි සොයා බලනු ඇත. සේවක_නාම තීරුවේ දර්ශකයක් නිර්මාණය වී ඇතැයි උපකල්පනය කළහොත්, දත්ත සෙවීම සඳහා සාරධර්ම සෙවීම සඳහා දර්ශකය භාවිතා කිරීම ඇත්ත වශයෙන්ම අර්ථවත්ද යන්න තීරණය කිරීමට සිදුවනු ඇත - මන්දයත් දත්ත සමුදා දර්ශකය භාවිතා කිරීම ඇත්ත වශයෙන්ම අඩු කාර්යක්ෂමතාවයක් ඇති සමහර අවස්ථා ඇති බැවිනි. , සහ වඩාත් කාර්යක්ෂම වන්නේ සම්පූර්ණ වගුව පරිලෝකනය කිරීමට පමණි.

දත්ත සමුදා දර්ශකයක් තිබීමේ පිරිවැය කුමක්ද?

එය අවකාශය ගනී - සහ ඔබේ වගුව විශාල වන තරමට ඔබේ දර්ශකය විශාල වේ. දර්ශක සමඟ ඇති තවත් කාර්ය සාධනයක් නම්, ඔබ අනුරූප වගුවේ පේළි එකතු කිරීම, මකා දැමීම හෝ යාවත්කාලීන කිරීම සිදු කරන සෑම විටම ඔබේ දර්ශකයට එකම මෙහෙයුම් සිදු කිරීමට සිදුවීමයි. දර්ශකය ආවරණය වන වගු තීරුවේ (ය) ඇති ඕනෑම දෙයක් මෙන් මිනිත්තුවක දත්ත දක්වා දර්ශකයක් තිබිය යුතු බව මතක තබා ගන්න.

සාමාන්‍ය රීතියක් ලෙස, දර්ශකයක් සෑදිය යුත්තේ සුචිගත කළ තීරුවේ දත්ත නිතර විමසන්නේ නම් පමණි.

මෙයද බලන්න

  1. සාමාන්‍යයෙන් හොඳ දර්ශක සාදන තීරු මොනවාද?
  2. දත්ත සමුදා දර්ශක ක්‍රියා කරන්නේ කෙසේද?

4
"දත්ත සමුදා දර්ශකයක් අනෙක් තීරුවල අගයන් ගබඩා නොකරයි" - සත්‍ය නොවේ.
mustaccio

2
ustmustaccio: සුචිගත කරන ලද තීරු සමඟ පේළිය පිළිබඳ දර්ශකය ගබඩා කරයි (මා දන්නා පරිදි). මම වැරදියි. දර්ශකය වෙනත් තීරු අගයන් ගබඩා කරන බව පවසන කිසියම් සඳහනක් ඔබට තිබේද?
සොම්නාත් මුලුක්

3
Down ඩවුන් වොටර්ස් වෙත: මට වැඩිදියුණු කළ හැකි වන පරිදි වැරැද්ද කුමක්දැයි ඔබට පැහැදිලි කළ හැකිද?
සොම්නාත් මුලුක්

2
උදාහරණයක් ලෙස SQL සේවාදායක පොකුරු දර්ශක හෝ DB2 CREATE INDEX ... INCLUDEවගන්තිය පරීක්ෂා කරන්න . මගේ පිළිතුරට අනුව, ඔබේ පිළිතුරෙහි ඔබට බොහෝ සාමාන්‍යකරණයන් ඇත.
mustaccio

12
ustmustaccio: එබැවින් පෙරනිමියෙන් create indexඅනෙක් තීරු ඇතුළත් නොවන අතර එය කළ යුත්තේ ඇයි. If we did just store all the other columns in the index, then it would be just like creating another copy of the entire table, which would take up way too much space and would be very inefficient.. මෙය දර්ශකවල වඩාත් සාමාන්‍යකරණය කළ අනුවාදයකි. CREATE INDEX ... INCLUDEයනු වෙනත් තීරු සලකා බැලීමෙන් නවතම අනුවාදයයි. මා පැහැදිලි කළ පෝස්ට් වඩාත් සාමාන්‍යකරණය කළ අනුවාදය සලකා බලයි. සියලුම දත්ත සමුදායන් සලකා බැලුවහොත් දර්ශක ක්‍රියා කරන ආකාරය එක් පොතක් වන්නේ කෙසේද? එසේ නොවේ ද? පිළිතුර පහත් කොට සැලකීමට සුදුසු යැයි ඔබ සිතනවාද?
සොම්නාත් මුලුක්

97

සරල විස්තරය!

දර්ශකය යනු වගුවක නිශ්චිත තීරුවක් සඳහා අගයන් ගබඩා කරන දත්ත ව්‍යුහයකි . වගුවක තීරුවක දර්ශකයක් සාදනු ලැබේ.

උදාහරණය: අපට Userතීරු තුනක් සහිත දත්ත සමුදා වගුවක් ඇත - Name, Ageසහ Address. Userවගුවේ පේළි දහස් ගණනක් ඇතැයි උපකල්පනය කරන්න .

දැන් අපි කියමු, 'ජෝන්' ලෙස නම් කර ඇති ඕනෑම පරිශීලකයෙකුගේ සියලු තොරතුරු සොයා ගැනීමට විමසුමක් ක්‍රියාත්මක කිරීමට අපට අවශ්‍ය බව. අපි පහත විමසුම ක්‍රියාත්මක කරන්නේ නම්:

SELECT * FROM User 
WHERE Name = 'John'

දත්ත සමුදා මෘදුකාංගයට වචනාර්ථයෙන් Userවගුවේ ඇති සෑම පේළියක්ම බැලීමට සිදුවන්නේ Nameඑම පේළිය සඳහා 'ජෝන්' දැයි බැලීමට ය . මෙය බොහෝ කාලයක් ගතවනු ඇත.

indexඅපට උපකාරී වන ස්ථානය මෙයයි : සෙවුම් විමසුම් වේගවත් කිරීම සඳහා දර්ශකය භාවිතා කරනුයේ මූලික වශයෙන් පරීක්ෂා කළ යුතු වගුවක ඇති වාර්තා / පේළි ගණන අඩු කිරීමෙනි .

දර්ශකයක් නිර්මාණය කරන්නේ කෙසේද:

CREATE INDEX name_index
ON User (Name)

indexසමන්විත එක් මේසයෙන්: තීරුව අගයන් (ජෝන් උදා) , සහ එම අගයන් තුළ ගබඩා වේ දත්ත ව්යුහය .

එබැවින් දැන් දත්ත සමුදාය ජෝන් නම් සේවකයින් සොයා ගැනීම සඳහා දර්ශකය භාවිතා කරනු ඇත, මන්ද එම දර්ශකය අකාරාදී පිළිවෙලින් පරිශීලකයින්ගේ නාමයෙන් වර්ග කරනු ඇත. තවද, එය වර්ග කර ඇති නිසා, එයින් අදහස් වන්නේ නමක් සෙවීම වඩා වේගවත් බැවින් “J” වලින් ආරම්භ වන සියලුම නම් දර්ශකයේ එකිනෙකට යාබදව ඇති බැවිනි!


1
දර්ශකයක තීරුවේ
අනුපිළිවෙලක් දැක්වීමක්

4
ස්තූතියි. මෙය මගේ අවබෝධයට උපකාරී විය. එබැවින් මූලික වශයෙන් දර්ශකයක් යනු වර්ග කර ඇති තීරු දත්තවල අනුරුවකි. සාමාන්‍යයෙන් තීරු දත්ත ඇත්තේ දත්ත ඇතුළත් කළ අනුපිළිවෙලට ය.
නීල්

34

ඉක්මන් යෝජනාවක් .. සුචිගත කිරීම සඳහා ඔබට අමතර ලිවීම් සහ ගබඩා ඉඩ ප්‍රමාණයක් වැය වන බැවින් ඔබේ යෙදුමට වැඩි ඇතුළත් කිරීම් / යාවත්කාලීන කිරීමේ ක්‍රියාවලියක් අවශ්‍ය නම්, ඔබට සුචිගත කිරීම් නොමැතිව වගු භාවිතා කිරීමට අවශ්‍ය විය හැකිය, නමුත් එයට වැඩි දත්ත ලබා ගැනීමේ මෙහෙයුම් අවශ්‍ය නම්, ඔබ සුචිගත කිරීම සඳහා යා යුතුය වගුව.


6
මෙය අදහස් දැක්වීමක් මිස පිළිතුරක් නොවේ.
රොන් ජෝන්

7
එය සාමාන්‍ය ප්‍රකාශයක් බැවින් එය වඩාත් දෘශ්‍යමාන වන අතර මේ ආකාරයෙන් වඩාත් ප්‍රයෝජනවත් වේ. මෙය විවරණයක් ලෙස එකතු කළ යුතු පිළිතුර කුමක්ද?
pfabri

2
බොහෝ විට OP
guyarad

32

දත්ත සමුදා දර්ශකය පොතක දර්ශකයක් ලෙස සිතන්න.

ඔබ සතුව සුනඛයන් පිළිබඳ පොතක් තිබේ නම් සහ ජර්මානු එ pher ේරුන් යැයි කියමු. ඔබට පොතේ සියලුම පිටු පෙරළා ඔබ සොයන දේ සොයා ගත හැකිය - නමුත් මෙය ඇත්ත වශයෙන්ම කාලය ගතවන අතර නොවේ ඉතා වේගවත්.

තවත් විකල්පයක් නම්, ඔබට පොතේ දර්ශක අංශයට ගොස් ඔබ සොයන දේ සොයා ගත හැක්කේ ඔබ සොයන ආයතනයේ නම (මෙම අවස්ථාවේදී, ජර්මානු එ pher ේරුන්) සහ පිටු අංකය දෙස බැලීමෙනි. ඔබ සොයන දේ ඉක්මනින් සොයා ගන්න.

දත්ත සමුදායේ, පිටු අංකය දර්ශකය ලෙස හැඳින්වෙන අතර එය දත්ත ගබඩාව වස්තුව පිහිටා ඇති තැටියේ ලිපිනය වෙත යොමු කරයි. එකම ජර්මානු ෂෙපර්ඩ් ප්‍රතිසමයක් භාවිතා කරමින්, අපට මෙවැනි දෙයක් තිබිය හැකිය (“ජර්මානු ෂෙපර්ඩ්”, 0x77129) ජර්මානු එ pher ේරා 0x77129සඳහා පේළි දත්ත ගබඩා කර ඇති තැටියේ ලිපිනය කොතැනද?

කෙටියෙන් කිවහොත්, දර්ශක යනු විමසුම් සෙවීම වේගවත් කිරීම සඳහා වගුවක නිශ්චිත තීරුවක අගයන් ගබඩා කරන දත්ත ව්‍යුහයකි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.