ROWID pseudo column & DUAL table

ROWID એ તમારી data ની હરોળનું ગુપ્ત ભૌતિક સરનામું છે, જ્યારે DUAL ઝડપી ગણતરીઓ માટેની હાથવગી એક-હરોળની ચબરખી છે.

9 min read · 10 cards · 2 checks

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


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 ColumnDUAL Table
એ શું છે?એક હરોળનું ભૌતિક સરનામું ધરાવતો છુપાયેલો columnએક હરોળ અને એક column વાળું એક ખરેખરું ભૌતિક table
મુખ્ય ઉપયોગએક ચોક્કસ હરોળ સુધી સૌથી ઝડપી શક્ય પ્રવેશFunctions, ગણિત, કે system ના અચળાંકો આંકવા
સંગ્રહDynamically બને છે, table ના schema માં સંઘરાયેલો નથીOracle ના data dictionary માં કાયમ માટે સંઘરાયેલું
ઉદાહરણ QuerySELECT 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;

Copy કરીને Oracle FreeSQL ખોલો
Oracle FreeSQL, Oracle SQL નું મફત online editor છે. Code પહેલા copy થઈ જાય છે: તેને ત્યાં paste કરીને Run કરો.

Quiz

જો tickets table માં હાલમાં 15 rows હોય એમ ધારીને તમે 'SELECT 10 + 20 FROM tickets;' query ચલાવો તો શું થશે?

  1. એ 30 ની value વાળી એક હરોળ પાછી આપશે
  2. એ 15 rows પાછી આપશે, દરેક 30 ની value દેખાડતી
  3. એ એક syntax error ફેંકશે કારણ કે 10 + 20 એ ખરેખરો column નથી
  4. એ કોઈ પણ મનફાવતી હરોળનું ભૌતિક સરનામું પાછું આપશે
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 એ મેજ પરની ચબરખી છે!

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 Introduction of Relational Database

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

ROWID pseudo column & DUAL table · Mastering SQL - PL/SQL (SEC-02 option A) · Gri-Learn