Concepts of Index (Create, drop)

એક index એ pointer નું માળખું છે જે એક પુસ્તકની પાછળની અનુક્રમણિકાની જેમ data મેળવવાનું ઝડપી બનાવે છે, Oracle ને દરેકે દરેક હરોળ scan કરવામાંથી બચાવતાં.

10 min read · 11 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

50,000 પુસ્તકોની શોધ

કલ્પો કે તમે 'Mastering Oracle' નામનું પાઠ્યપુસ્તક શોધવા CampusLib campus ની library માં જાઓ છો. Librarian ભોંય પર અસ્તવ્યસ્ત ઠલવાયેલા 50,000 પુસ્તકોના વિશાળ ઢગલા તરફ ઈશારો કરે છે. તમારું પુસ્તક શોધવા, તમારે મેળ ન મળે ત્યાં સુધી એક પછી એક દરેકે દરેક પુસ્તક ઉપાડવું પડે. જ્યારે એક column indexed ન હોય ત્યારે Oracle એક Full Table Scan દરમિયાન બિલકુલ આ જ પીડાદાયક પ્રક્રિયા કરે છે. આપણે આ કેવી રીતે સુધારીએ?

Theory

પાઠ્યપુસ્તકની અનુક્રમણિકા

એક database index ને બિલકુલ તમારાં BCA નાં પાઠ્યપુસ્તકોની પાછળનાં અનુક્રમણિકાનાં પાનાં જેવો વિચારો. જો તમારે શોધવું હોય કે 'Subqueries' ક્યાં સમજાવ્યા છે, તમે બધાં 400 પાનાં ફેરવતા નથી. તમે પાછળની અનુક્રમણિકા ખોલો છો, 'Subqueries' જુઓ છો, પાના નંબર 142 શોધો છો, અને સીધા એ પાના પર જાઓ છો. Database index એ જ કરે છે, પાના નંબરોને Oracle ના આંતરિક અનન્ય pointers જેમને ROWIDs કહેવાય છે એનાથી બદલતાં.

Theory

Index શું છે?

ઔપચારિક રીતે, એક Index એ એક schema object છે જેમાં એક table ના indexed columns માં દેખાતી દરેક value માટે એક entry હોય છે અને એ rows સુધી સીધો, ઝડપી પ્રવેશ આપે છે. Oracle SQL માં, જ્યારે તમે એક index બનાવો, Oracle આપોઆપ એક B Tree માળખું બનાવે છે. આ માળખું column ની value ને disk પરના એના બિલકુલ ભૌતિક સ્થાન સાથે map કરે છે, જેને ROWID તરીકે ઓળખાય છે. આ data મેળવવાની કામગીરી દરમિયાન આખું table વાંચવાનું ટાળે છે.

At a glance

Oracle SQL માં data મેળવવાની પદ્ધતિઓની સરખામણી

લક્ષણFull Table ScanIndex Scan
શોધવાની પદ્ધતિઉપરથી નીચે દરેક હરોળ scan કરે છેROWID દ્વારા સીધું મળતી rows પર કૂદે છે
Execution ની ઝડપTable નું કદ વધે તેમ ધીમીવીજળીની ઝડપે, table ના કદથી સ્વતંત્ર
સંસાધનનો ખર્ચઊંચો CPU અને disk IO નો વપરાશઓછી memory અને disk IO નો વપરાશ
શ્રેષ્ઠ ઉપયોગRows ની મોટી ટકાવારી મેળવવાચોક્કસ થોડી rows મેળવવા (5 ટકાથી ઓછી)

Practical

Creating and Dropping an Index on CampusLib

-- Step 1: Let us speed up searches for book titles in CampusLib
CREATE INDEX idx_book_title 
ON books (title);

-- Step 2: Test a query that will now use this index
SELECT book_id, price 
FROM books 
WHERE title = 'Mastering Oracle';

-- Step 3: Remove the index if titles change too frequently
DROP INDEX idx_book_title;

This example runs in Gri-Learn on the web, where you can edit it and see the output.

Quiz

જો તમે books table ના price column પર એક index બનાવો, તો તમે એક INSERT statement ચલાવો ત્યારે પડદા પાછળ શું થાય છે?

  1. Oracle નવી હરોળ table માં નાખે છે અને આપોઆપ index update કરે છે.
  2. Oracle table update કરે છે પણ તમારે હાથે index ફરીથી બનાવવો પડે છે.
  3. Oracle INSERT અટકાવે છે કારણ કે index table ને તાળું મારે છે.
  4. INSERT ઝડપી ચાલે છે કારણ કે index ખાલી જગ્યા શોધવામાં મદદ કરે છે.
Show the answer

Oracle નવી હરોળ table માં નાખે છે અને આપોઆપ index update કરે છે.

Oracle indexes આપોઆપ જાળવે છે. જ્યારે તમે rows નાખો, બદલો, કે કાઢો, Oracle તરત index નું માળખું update કરે છે. પણ, આ વધારાનું કામ લખવાની કામગીરીને થોડી ધીમી બનાવે છે, જે એક મોટો university exam નો પ્રશ્નનો ફાંદો છે!

Follow along

એક Query દરમિયાન Oracle Index કેવી રીતે વાપરે છે

  1. 1. Query નું Parsing Oracle નું optimizer WHERE clause તપાસે છે કે શોધના column માટે કોઈ index અસ્તિત્વમાં છે કે નહીં.
  2. 2. Index માં શોધ Oracle ચોક્કસ ચાવીની value શોધવા આંતરિક B Tree index નું માળખું ફેંદે છે.
  3. 3. ROWID કાઢવું Index બિલકુલ ROWID આપે છે, જે disk પર મળતી હરોળનું ભૌતિક સરનામું છે.
  4. 4. સીધું હરોળ લાવવી Oracle બીજા બધા records છોડી દે છે અને ROWID વાપરીને સીધો block લાવે છે.

Watch out

વધુ પડતા Indexing નો ફાંદો

દરેક column ને index ન કરો! Students ઘણી વાર માને છે કે વધુ indexes એટલે વધુ ઝડપી database. યાદ રાખો: જ્યારે એક index SELECT queries ઝડપી બનાવે છે, ત્યારે એ INSERT, UPDATE, અને DELETE statements ધીમાં પાડે છે કારણ કે Oracle ને સતત index નું માળખું ફરીથી લખવું પડે છે. માત્ર એ columns પર indexes બનાવો જે WHERE clauses કે JOIN conditions માં વારંવાર વપરાય છે.

Think first

Oracle DROP INDEX Syntax ની ચકાસણી

માનસિક તપાસ: આ command જુઓ: 'DROP INDEX books.idx_book_title;'. શું આ Oracle SQL માં સફળતાપૂર્વક ચાલશે? Tap કરતાં પહેલાં વિચારો.

Show the answer

ના, એ નિષ્ફળ જશે! Oracle SQL માં, index નાં નામ એક schema ની અંદર અનન્ય હોય છે. સાચી syntax ખાલી 'DROP INDEX idx_book_title;' છે. SQLite જેવા બીજા કેટલાક SQL dialects થી વિપરીત, તમે drop ની કામગીરી દરમિયાન table ના નામનો prefix વાપરતા નથી.

Theory

છુપાયેલો Primary Key નો Index

શું તમને ખબર છે કે તમે પહેલેથી indexes બનાવતા આવ્યા છો? Oracle માં, જ્યારે પણ તમે એક table પર PRIMARY KEY કે UNIQUE constraint વ્યાખ્યાયિત કરો (જેમ કે books માં book_id), Oracle પડદા પાછળ એ column માટે આપોઆપ એક અનન્ય index બનાવે છે. તમારે primary key ના columns માટે ક્યારેય હાથે index બનાવવાની જરૂર નથી!

Summary

Key takeaways

  • એક index એ વૈકલ્પિક database માળખું છે જે data મેળવવાની queries ને વેગ આપે છે.
  • Oracle column ની values ને સીધી અનન્ય ROWIDs સાથે map કરતું એક ખાસ વૃક્ષનું માળખું વાપરે છે.
  • એને બનાવવા CREATE INDEX વાપરો અને એને કાઢવા index ના નામ સાથે DROP INDEX વાપરો.
  • Indexes SELECT queries ઝડપી બનાવે છે પણ INSERT, UPDATE, અને DELETE નાં કામોમાં બોજ ઉમેરે છે.
  • Oracle PRIMARY KEY અને UNIQUE columns માટે આપોઆપ અનન્ય indexes બનાવે છે.
  • Memory hook: Indexing એ bookmark કરવા જેવું છે: શોધવામાં ઝડપી, ફરીથી ગોઠવવામાં ધીમું!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Advanced SQL

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati