Theory
Database એક Ticket તરત કેવી રીતે શોધે છે?
કલ્પો કે તમે આપણી TicketDesk system ચલાવો છો અને એક નિર્ણાયક bug ના ticket ને તરત update જોઈએ છે. Oracle લાખોમાંથી એ બિલકુલ record ને મિલિસેકન્ડોમાં કેવી રીતે પકડે છે? અને, જો તમારે ખાલી આજની તારીખ તપાસવી હોય કે એક SQL function ને ખરેખરા tickets ના table પર ચલાવતાં પહેલાં ચકાસવું હોય તો? તમે એક ઝડપી ગણતરી કરવા ખરેખરો data scan કરવા માંગતા નથી. Oracle બિલકુલ આ પરિસ્થિતિઓ માટે બે છુપાયેલાં ઓજારો આપે છે: ROWID pseudo column અને DUAL table.
Theory
વખારનો પ્લોટ અને ચબરખી
ROWID ને એક વિશાળ વખારમાં એક ખોખાના બિલકુલ GPS ના સંકેતાંક કે ગલીની છાજલીના નંબર જેવો વિચારો. બે ખોખાં એકસરખાં દેખાય તો પણ, એમનું ભૌતિક સ્થાન સંપૂર્ણપણે અનન્ય રહે છે. DUAL table, બીજી બાજુ, તમારા મેજ પરની ચીકણી ચિઠ્ઠી જેવું છે. તમે એક સાદો સરવાળો ગણવા માટે એક વિશાળ ચોપડો ખોલતા નથી. તમે એને એક નાનકડી ચબરખી પર ઘસડી નાખો છો જેમાં બિલકુલ એક જ ખાલી જગ્યા છે.
Theory
ROWID અને DUAL સમજવાં
Oracle ના dialect માં, ROWID એ એક pseudo column છે. Query કરો ત્યારે એ એક સામાન્ય table ના column જેવો દેખાય છે, પણ એ ખરેખર તમારા table ની વ્યાખ્યામાં સંઘરાયેલો નથી. એને બદલે, એ disk ના સંગ્રહ પર એક હરોળનું બિલકુલ ભૌતિક સરનામું દર્શાવે છે. DUAL table એ એક ખાસ, built-in Oracle નું table છે જેમાં DUMMY નામનો બિલકુલ એક column અને X value વાળી બિલકુલ એક હરોળ છે. એ expressions આંકવા કે SYSDATE જેવી system ની values લાવવા એક નકલી table તરીકે કામ કરે છે.
At a glance
Oracle ના છુપાયેલા સરનામાં શોધનાર અને નકલી કાર્યક્ષેત્રના table ની સરખામણી
| લક્ષણ | ROWID Pseudo Column | DUAL Table |
|---|---|---|
| એ શું છે? | એક હરોળનું ભૌતિક સરનામું ધરાવતો છુપાયેલો column | એક હરોળ અને એક column વાળું એક ખરેખરું ભૌતિક table |
| મુખ્ય ઉપયોગ | એક ચોક્કસ હરોળ સુધી સૌથી ઝડપી શક્ય પ્રવેશ | Functions, ગણિત, કે system ના અચળાંકો આંકવા |
| સંગ્રહ | Dynamically બને છે, table ના schema માં સંઘરાયેલો નથી | Oracle ના data dictionary માં કાયમ માટે સંઘરાયેલું |
| ઉદાહરણ Query | SELECT ROWID, title FROM tickets; | SELECT SYSDATE FROM dual; |
Practical
Querying Physical Addresses and System Constants
-- Step 1: See the physical address of our tickets
SELECT ROWID, id, title FROM tickets;
-- Step 2: Use the single row DUAL table to get the system date for TicketDesk
SELECT SYSDATE FROM dual;Quiz
જો tickets table માં હાલમાં 15 rows હોય એમ ધારીને તમે 'SELECT 10 + 20 FROM tickets;' query ચલાવો તો શું થશે?
- એ 30 ની value વાળી એક હરોળ પાછી આપશે
- એ 15 rows પાછી આપશે, દરેક 30 ની value દેખાડતી
- એ એક syntax error ફેંકશે કારણ કે 10 + 20 એ ખરેખરો column નથી
- એ કોઈ પણ મનફાવતી હરોળનું ભૌતિક સરનામું પાછું આપશે
Show the answer
એ 15 rows પાછી આપશે, દરેક 30 ની value દેખાડતી
કારણ કે query tickets table ને નિશાન બનાવે છે, Oracle એ table માં હાજર દરેકે દરેક હરોળ માટે expression આંકે છે. કારણ કે 15 rows છે, એ પરિણામ 30 પંદર વાર છાપે છે. બિલકુલ આ જ દોહરાવાતા વર્તનને કારણે જ્યારે આપણને એક જ ગણતરીનું પરિણામ જોઈએ ત્યારે આપણે એને બદલે એક-હરોળનું DUAL table વાપરીએ છીએ!
Think first
માનસિક પડકાર: સરનામાંથી એક Record શોધવો
મનમાં એક SQL query રચો જે tickets table માંથી એ ticket નું title શોધે જ્યાં ભૌતિક disk નું સરનામું AAAR3sAAEAAAACXAAA જેવી ચોક્કસ hex value સાથે મળે. ઉજાગર કરતાં પહેલાં એના વિશે વિચારો.
Show the answer
Query છે: SELECT title FROM tickets WHERE ROWID = 'AAAR3sAAEAAAACXAAA'; આ સૌથી ઝડપી શક્ય રસ્તો છે જેનાથી Oracle એક હરોળ લાવી શકે કારણ કે એ indexes અને આખા table ના scans છોડીને સીધું disk ના block પર જાય છે.
Watch out
Hardcode કરેલા ROWID નો ફાંદો
તમારી application ના code માં કે university ની પરીક્ષાના જવાબોમાં ક્યારેય ROWID ની string hardcode ન કરો! જ્યારે એક ROWID સૌથી ઝડપી પ્રવેશ આપે છે, ત્યારે એ કાયમી નથી. જો એક table ફરીથી બને, export અને import થાય, કે એક હરોળ એવી રીતે update થાય જેથી હરોળ ખસે, ભૌતિક સરનામું સંપૂર્ણપણે બદલાય છે. ROWID ને હંમેશા એક કામચલાઉ runtime ના સરનામા તરીકે ગણો, એક કાયમી primary key તરીકે નહીં.
Theory
વાસ્તવિક દુનિયા અને ભવિષ્યનાં Semesters
તમારા વ્યવહારુ labs માં, તમે built-in functions ચકાસવા કે records નાખતાં પહેલાં sequences વાપરીને primary keys બનાવવા સતત DUAL વાપરશો. Sem 3 જેવા પછીના semesters માં જ્યારે SQLite કે બીજાં databases ભણશો, તમને FROM clause વગરના SELECT expression જેવા સમકક્ષ મળશે. Oracle સખ્તાઈથી એક FROM clause માંગે છે, જે DUAL ને એકદમ આવશ્યક બનાવે છે.
Summary
Key takeaways
- ROWID એ એક Oracle નું pseudo column છે જે એક હરોળનું બિલકુલ ભૌતિક disk નું સરનામું દર્શાવે છે.
- એક WHERE clause માં ROWID વાપરવાથી હરોળ મેળવવાની સૌથી ઝડપી શક્ય ગતિ મળે છે.
- Tables ફરીથી બને તો ROWIDs બદલાઈ શકે છે, તેથી એમને ક્યારેય primary keys તરીકે વાપરવા ન જોઈએ.
- DUAL એ બિલકુલ એક હરોળ અને DUMMY નામના એક column વાળું એક built-in Oracle નું table છે.
- DUAL એવી queries ચલાવવા વપરાય છે જે એક જ પરિણામ પાછું આપે, જેમ કે system ની તારીખો કે ગણતરીઓ.
- Memory hook: ROWID એ GPS નો સંકેતાંક છે, DUAL એ મેજ પરની ચબરખી છે!