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 Scan | Index 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 ચલાવો ત્યારે પડદા પાછળ શું થાય છે?
- Oracle નવી હરોળ table માં નાખે છે અને આપોઆપ index update કરે છે.
- Oracle table update કરે છે પણ તમારે હાથે index ફરીથી બનાવવો પડે છે.
- Oracle INSERT અટકાવે છે કારણ કે index table ને તાળું મારે છે.
- INSERT ઝડપી ચાલે છે કારણ કે index ખાલી જગ્યા શોધવામાં મદદ કરે છે.
Show the answer
Oracle નવી હરોળ table માં નાખે છે અને આપોઆપ index update કરે છે.
Oracle indexes આપોઆપ જાળવે છે. જ્યારે તમે rows નાખો, બદલો, કે કાઢો, Oracle તરત index નું માળખું update કરે છે. પણ, આ વધારાનું કામ લખવાની કામગીરીને થોડી ધીમી બનાવે છે, જે એક મોટો university exam નો પ્રશ્નનો ફાંદો છે!
Follow along
એક Query દરમિયાન Oracle Index કેવી રીતે વાપરે છે
- 1. Query નું Parsing Oracle નું optimizer WHERE clause તપાસે છે કે શોધના column માટે કોઈ index અસ્તિત્વમાં છે કે નહીં.
- 2. Index માં શોધ Oracle ચોક્કસ ચાવીની value શોધવા આંતરિક B Tree index નું માળખું ફેંદે છે.
- 3. ROWID કાઢવું Index બિલકુલ ROWID આપે છે, જે disk પર મળતી હરોળનું ભૌતિક સરનામું છે.
- 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 કરવા જેવું છે: શોધવામાં ઝડપી, ફરીથી ગોઠવવામાં ધીમું!