ROWID pseudo column & DUAL table

ROWID आपकी data row का गुप्त physical address है, जबकि DUAL quick calculations के लिए काम आने वाला single-row scratchpad है।

9 min read · 10 cards · 2 checks

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


Theory

database एक ticket तुरंत कैसे खोजता है?

कल्पना कीजिए आप हमारा TicketDesk system चला रहे हैं और एक critical bug ticket को एक तुरंत update चाहिए। Oracle उस बिल्कुल record को लाखों में से milliseconds में कैसे pinpoint करता है? साथ ही, क्या हो अगर आप बस आज की date जाँचना या एक SQL function को असल tickets table पर चलाने से पहले test करना चाहते हैं? आप बस एक quick calculation करने के लिए असल data scan नहीं करना चाहते। Oracle इन बिल्कुल स्थितियों के लिए दो छिपे औज़ार देता है: ROWID pseudo column और DUAL table।

Theory

Warehouse Plot और Scratchpad

ROWID को एक विशाल warehouse में एक box के बिल्कुल GPS coordinate या aisle shelf number की तरह सोचिए। भले दो boxes एक जैसी दिखें, उनका physical location पूरी तरह unique रहता है। दूसरी ओर DUAL table, आपके desk पर एक sticky note की तरह है। आप बस एक सरल जोड़ calculate करने के लिए एक विशाल ledger book नहीं खोलते। आप इसे एक छोटे scratchpad पर लिखते हैं जिसमें बिल्कुल एक ख़ाली जगह है।

Theory

ROWID और DUAL समझना

Oracle dialect में, ROWID एक pseudo column है। query करने पर यह एक regular table column जैसा दिखता है, पर यह असल में आपकी table definition में store नहीं होता। इसके बजाय, यह disk storage पर एक row का बिल्कुल physical address दर्शाता है। DUAL table एक विशेष, built-in Oracle table है जिसमें DUMMY नामक बिल्कुल एक column और value X के साथ बिल्कुल एक row है। यह expressions evaluate करने या SYSDATE जैसे system values fetch करने के लिए एक dummy table के रूप में काम करता है।

At a glance

Oracle के छिपे address locator और dummy workspace table की तुलना

FeatureROWID Pseudo ColumnDUAL Table
यह क्या है?एक row का physical address रखता एक छिपा columnएक row और एक column वाली एक असली physical table
Primary Useएक ख़ास row तक सबसे तेज़ संभव पहुँचfunctions, math, या system constants evaluate करना
Storagedynamically उत्पन्न, table schema में store नहींOracle data dictionary में स्थायी रूप से store
Example QuerySELECT ROWID, title FROM tickets;SELECT SYSDATE FROM dual;

Practical

Physical Addresses और System Constants Query करना

-- 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

क्या होगा अगर आप query 'SELECT 10 + 20 FROM tickets;' चलाते हैं यह मानते हुए कि tickets table में मौजूदा में 15 rows हैं?

  1. यह value 30 के साथ एक row return करेगी
  2. यह 15 rows return करेगी, हर एक value 30 दिखाती हुई
  3. यह एक syntax error फेंकेगी क्योंकि 10 + 20 एक असली column नहीं है
  4. यह एक बेतरतीब row का physical address return करेगी
Show the answer

यह 15 rows return करेगी, हर एक value 30 दिखाती हुई

चूँकि query tickets table को target करती है, Oracle उस table में मौजूद हर एक row के लिए expression evaluate करता है। चूँकि 15 rows हैं, यह परिणाम 30 पंद्रह बार print करता है। यह दोहराया behavior बिल्कुल वजह है कि हम एक single calculation result चाहने पर इसके बजाय single row DUAL table इस्तेमाल करते हैं!

Think first

Mental Challenge: Address द्वारा एक Record खोजना

tickets table से ticket title खोजने के लिए एक SQL query मन में बनाइए जहाँ physical disk address एक ख़ास hex value जैसे AAAR3sAAEAAAACXAAA से मेल खाता है। reveal करने से पहले इसके बारे में सोचिए।

Show the answer

query है: SELECT title FROM tickets WHERE ROWID = 'AAAR3sAAEAAAACXAAA'; यह सबसे तेज़ संभव तरीक़ा है जिससे Oracle एक अकेली row fetch कर सकता है क्योंकि यह indexes और full table scans को दरकिनार करके सीधे disk block तक जाता है।

Watch out

Hardcoded ROWID जाल

अपने application code या university exam answers के अंदर कभी एक ROWID string hardcode मत कीजिए! जबकि एक ROWID सबसे तेज़ पहुँच देता है, यह स्थायी नहीं है। अगर एक table फिर से बनाई जाती है, export और import की जाती है, या एक row को इस तरह update किया जाता है कि row movement हो, physical address पूरी तरह बदल जाता है। ROWID को हमेशा एक अस्थायी runtime address मानिए, एक स्थायी primary key नहीं।

Theory

असली दुनिया और भविष्य के Semesters

अपने practical labs में, आप records insert करने से पहले built-in functions test करने या sequences इस्तेमाल करके primary keys बनाने के लिए DUAL लगातार इस्तेमाल करेंगे। Sem 3 जैसे बाद के semesters में जब SQLite या अन्य databases पढ़ते हैं, आप SELECT expression बिना एक FROM clause जैसे समतुल्य पाएँगे। Oracle सख़्ती से एक FROM clause माँगता है, जो DUAL को एक पूर्ण अनिवार्यता बनाता है।

Summary

Key takeaways

  • ROWID एक Oracle pseudo column है जो एक row का बिल्कुल physical disk address दर्शाता है।
  • एक WHERE clause में ROWID इस्तेमाल करना सबसे तेज़ संभव row retrieval speed देता है।
  • ROWIDs बदल सकते हैं अगर tables फिर से बनाई जाएँ, इसलिए उन्हें कभी primary keys के रूप में इस्तेमाल नहीं करना चाहिए।
  • DUAL एक built-in Oracle table है जिसमें DUMMY नामक बिल्कुल एक row और एक column है।
  • DUAL उन queries को चलाने के लिए इस्तेमाल होता है जो एक अकेला result return करती हैं, जैसे system dates या calculations।
  • Memory hook: ROWID GPS coordinate है, DUAL desktop scratchpad है!

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