ROWID pseudo column & DUAL table

ROWID તમને hard drive પર એક હરોળનું બિલકુલ ભૌતિક સંગ્રહનું સરનામું પકડવા દે છે, જ્યારે DUAL table એક ખરેખરા table વગર તાત્કાલિક SQL queries ચલાવવા માટે એક built-in કાચા કામની ચબરખી તરીકે કામ કરે છે.

10 min read · 13 cards · 3 checks

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


Theory

ભૂતિયા Columns અને અદૃશ્ય Tables

જ્યારે તમે SELECT name, roll_no FROM students; જેવી એક database table ને query કરો, ત્યારે તમે એવાં સંરચનાત્મક તત્ત્વો વાંચવાની અપેક્ષા રાખો છો જે તમે જાતે સ્પષ્ટપણે બનાવ્યાં હોય. પણ પડદા પાછળ, Oracle દરેક હરોળ સાથે જોડાયેલા ગુપ્ત tracking ના variables રાખે છે, અને એક જાદુઈ એક-હરોળનું સંરચનાત્મક table આપે છે જે માત્ર ઝડપી ગાણિતિક ગણતરીઓ કે system ની તપાસના જવાબ આપવા જ અસ્તિત્વમાં છે. જો તમારે hard drive ની chip પર બિલકુલ કયા ભૌતિક ખાનામાં એક હરોળ સચવાઈ છે એ જાણવું હોય, કે તમારે ખાલી એક built-in string function ને ખરેખરા student data સાથે જોડ્યા વગર ચકાસવું હોય, તો તમે એ કેવી રીતે કરો? અહીં જ ROWID pseudo-column અને DUAL table તમારી વહારે આવે છે.

Theory

GPS ના Latitude Coordinate સામે કોરી ચબરખી

ROWID ને એક ભૌતિક ઘર પર કોતરેલા કાયમી GPS coordinate ના થપ્પા (Latitude, Longitude, અને માળનો નંબર) જેવો વિચારો. બિલકુલ એક જ નામ ધરાવતા બે લોકો એકસરખાં દેખાતાં ઘરોમાં રહેવા જાય તો પણ, એમના ભૌગોલિક GPS codes તદ્દન અલગ રહેશે. બીજી બાજુ, DUAL table ને તમારા અભ્યાસના મેજ પરની કોરી ચબરખી જેવું વિચારો. જો તમારે 45 ને 12 થી ગુણવું હોય કે આજની તારીખ તપાસવી હોય, તમારે એક વિશાળ ચોપડો ખોલવાની કે નવી student directory બનાવવાની જરૂર નથી; તમે એ નાનકડી એક-ચોરસ ચબરખી પર ગણિત ઘસડી નાખો, ઝડપી જવાબ વાંચો, અને આગળ વધો!

Theory

ભૌતિક સરનામાનો નકશો: ROWID

Oracle SQL માં, એક Pseudo-column તમે query કરો ત્યારે બિલકુલ એક સામાન્ય table column ની જેમ વર્તે છે, પણ એનો data ખરેખર તમારા table ની custom column ની વ્યાખ્યાઓની અંદર સંઘરાયેલો હોતો નથી. ROWID એ એક હરોળ સુધી પહોંચવાનો સૌથી ઝડપી શક્ય રસ્તો છે કારણ કે એમાં સંગ્રહના માધ્યમ પર tuple નું બિલકુલ binary સરનામું હોય છે. એ ચાર ચોક્કસ સંરચનાત્મક ભાગોમાં વહેંચાયેલી 18-અક્ષરની base-64 string તરીકે દર્શાવાય છે.

Theory

એક Extended ROWID નું શરીરરચનાશાસ્ત્ર

એક extended ROWID OOOOOOFFFBBBBBBRRR જેવા અક્ષરોના ક્રમ જેવો દેખાય છે. ચાલો તોડીએ કે દરેક ટુકડો database engine ને શું ઉજાગર કરે છે:

At a glance

Table 1: Oracle Extended ROWID strings નું માળખાકીય વિભાજન.

ROWID ના ટુકડાના અક્ષરોદર્શાવાયેલો ઘટકભૌતિક સંગ્રહનું કાર્ય
અક્ષર 1 - 6 (OOOOOO)Data Object Numberચોક્કસ database segment/table ના માળખાની id ઓળખે છે.
અક્ષર 7 - 9 (FFF)Relative Datafile Numberસંગ્રહની drive પરની બિલકુલ ભૌતિક operating system ની file તરફ ઈશારો કરે છે.
અક્ષર 10 - 15 (BBBBBB)Data Block Numberહરોળનો data રાખતો ચોક્કસ memory ફાળવણીનો block પકડે છે.
અક્ષર 16 - 18 (RRR)Row Slot Numberએ ચોક્કસ block ની અંદરના બિલકુલ directory index ખાનાનું સ્થાન ઓળખે છે.

Theory

સાર્વત્રિક ચબરખી: DUAL Table

DUAL table એ Oracle દ્વારા data dictionary સાથે આપોઆપ બનાવાયેલું એક ખાસ, એક-હરોળનું, એક-column નું નકલી table છે. એ schema user SYS નું છે પણ public privilege હેઠળ બધા database users વૈશ્વિક રીતે વાપરી શકે છે. એમાં VARCHAR2(1) તરીકે વ્યાખ્યાયિત બિલકુલ એક column છે જેનું નામ DUMMY છે, અને એ 'X' value વાળી એક જ હરોળ રાખે છે. કારણ કે એમાં બિલકુલ એક જ હરોળ છે, તમે એની સામે બોલાવો એ કોઈ પણ function કે સમીકરણ બિલકુલ એક જ વાર આંકાય છે, જે એને expressions ચકાસવા આદર્શ બનાવે છે.

Practical

Executing Lookups and Testing Functions

-- Step 1: Query the physical location coordinate of your data
SELECT rowid, student_name FROM student_profile;

-- Step 2: Use DUAL to run a quick mathematical computation
SELECT (45 * 2) + 10 FROM DUAL;

-- Step 3: Fetch the current system date and time stamp using DUAL
SELECT SYSDATE FROM DUAL;

-- Step 4: Test a string function conversion on a dummy literal
SELECT LOWER('EXAM SUCCESS') FROM DUAL;

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

Think first

એક-હરોળના મૂલ્યાંકનનો નિયમ

જો તમે 'SELECT SYSDATE FROM DUAL;' ચલાવવાને બદલે 500 student rows ધરાવતા એક table પર 'SELECT SYSDATE FROM student_profile;' query ચલાવો તો શું થાય?

Show the answer

Query સફળતાપૂર્વક ચાલશે, પણ એ બિલકુલ એ જ system ની તારીખ 500 અલગ વાર છાપી નાખશે! કેમ? કારણ કે SQL statements હંમેશા લક્ષ્ય table માં અસ્તિત્વ ધરાવતી દરેક હરોળ માટે એક output લીટી પાછી આપે છે. બિલકુલ આ જ કારણે DUAL table માત્ર 1 હરોળ સાથે રચાયું હતું: એ ખાતરી આપે છે કે તમને database ના buffers બિનજરૂરી દોહરાવાયેલી લખાણની લીટીઓથી ભર્યા વગર બિલકુલ એક સાફ પરિણામની લીટી પાછી મળે.

Quiz

જો તમે એક UPDATE statement ચલાવો જે એક student ના નામની value બદલે, તો એ ચોક્કસ row record ની ROWID value નું શું થાય છે?

  1. ROWID તરત બદલાય છે કારણ કે હરોળની સામગ્રી એક નવા memory segment માં ફરીથી લખાય છે.
  2. ROWID સંપૂર્ણપણે અછૂતું રહે છે કારણ કે સંગ્રહના disk block પર હરોળનું ભૌતિક સ્થાન એનું એ જ રહે છે.
  3. એક COMMIT trigger થાય ત્યાં સુધી હરોળને એક કામચલાઉ null value સોંપાય છે.
  4. System હરોળનું ખાનું સંપૂર્ણપણે કાઢી નાખે છે અને એક નવો database object id બનાવે છે.
Show the answer

ROWID સંપૂર્ણપણે અછૂતું રહે છે કારણ કે સંગ્રહના disk block પર હરોળનું ભૌતિક સ્થાન એનું એ જ રહે છે.

ROWID એ disk પર એક હરોળનું ભૌતિક સંગ્રહનું સ્થાન ઓળખે છે. Columns ની અંદરની data ની values બદલવાથી (જેમ કે એક નામની string બદલવી) હરોળ disk પર ભૌતિક રીતે ક્યાં બેસે છે એ બદલાતું નથી. તેથી, ROWID સંપૂર્ણપણે નિશ્ચિત અને અચળ રહે છે.

Quiz

નીચેનામાંથી કયું વર્ણન Oracle ના આંતરિક DUAL table ના સંરચનાત્મક ઘટકોને સચોટ રીતે વ્યાખ્યાયિત કરે છે?

  1. એમાં 2 columns અને 2 rows છે, જે ગણતરીના parameters બે વાર તપાસવા રચાયેલાં છે.
  2. એમાં 0 columns અને 1 હરોળ છે, જે વહીવટી કામો માટે એક placeholder ડબ્બા તરીકે કામ કરે છે.
  3. એમાં DUMMY નામનો બિલકુલ 1 column અને 'X' value વાળી બિલકુલ 1 હરોળ છે.
  4. એ એક કામચલાઉ view છે જે તમારું session બંધ થતાં જ અદૃશ્ય થઈ જાય છે.
Show the answer

એમાં DUMMY નામનો બિલકુલ 1 column અને 'X' value વાળી બિલકુલ 1 હરોળ છે.

DUAL table સ્થિર રીતે એક ખરેખરા table તરીકે રચાયેલું છે જેમાં એક column (DUMMY) અને 'X' અક્ષરની value રાખતી બિલકુલ એક હરોળ છે. આ સંરચનાત્મક ગોઠવણ ખાતરી કરે છે કે એની સામે આંકાયેલું કોઈ પણ scalar function કે expression એક જ અનન્ય હરોળની output લીટી પાછી આપે.

Watch out

Classic ફાંદો: બેવડી હરોળ કાઢવાનો ગૂંચવાડો

University interviews માં એક ખૂબ લોકપ્રિય અને પેચીદો પ્રશ્ન છે: 'જો બે એકસરખી બેવડી rows બધા columns પર બિલકુલ એકસરખી values ધરાવતી હોય તો તમે એમને એક table માંથી કેવી રીતે કાઢો?' તમે એમને નામ કે roll numbers વાપરીને filter કરી શકતા નથી કારણ કે એ સંપૂર્ણપણે મળે છે! ઉકેલ છે ROWID વાપરવો. બે rows માણસને એકસરખી લાગે તો પણ, એમની ROWID strings અલગ હોવાની ખાતરી છે કારણ કે એ જુદાં ભૌતિક ખાનાંમાં રહે છે. બેવડી rows સલામત રીતે સાફ કરવા તમે આવી query લખી શકો: DELETE FROM students A WHERE A.rowid > (SELECT MIN(B.rowid) FROM students B WHERE A.roll_no = B.roll_no);

Theory

Semester 3 Performance Optimization સાથે જોડાણ

ROWID સમજવાથી તમને તમારા અદ્યતન Semester 3 ના database performance ના modules માટે મોટી શરૂઆતી લીડ મળે છે. જ્યારે તમે એક સ્પષ્ટ Database Index બનાવો, Oracle એક ઝડપી lookup નું વૃક્ષ બનાવે છે જે શોધની ચાવીઓને સીધી એમની અનુરૂપ ROWID values સાથે map કરે છે. આ storage engine ને ધીમા આખા-table ના સંગ્રહના scans છોડીને તરત બિલકુલ disk ના સ્થાને કૂદવા દે છે.

Summary

Key takeaways

  • ROWID એ એક આંતરિક Oracle pseudo-column છે જે disk ના સંગ્રહ પર એક હરોળનું બિલકુલ ભૌતિક સરનામું ખુલ્લું કરે છે.
  • એક extended ROWID એ base-64 encoded string છે જેમાં Object ID, Relative Datafile number, Block ID, અને Row Slot હોય છે.
  • DUAL table એ એક built-in એક-હરોળ, એક-column નું table છે જે expressions ચકાસવા ઝડપી ચબરખી તરીકે વપરાય છે.
  • DUAL સામે functions query કરવાથી ખાતરી થાય છે કે values (જેમ કે SYSDATE કે ગણિતની logic) બિલકુલ એક જ વાર આંકાય.
  • ROWIDs સંરચનાત્મક ફેરફારો દરમિયાન સ્થિર રહે છે, સિવાય કે હરોળ ભૌતિક રીતે કઢાય કે ખસેડાય.
  • Memory Hook: ROWID એ તમારી હરોળના ભૌતિક સંગ્રહના સરનામાનો થપ્પો છે, અને 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 Advanced SQL

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

ROWID pseudo column & DUAL table · Concepts of Relational Database Management Systems · Gri-Learn