मुझे विभिन्न तालिकाओं से एकाधिक कॉलम मर्ज करने की आवश्यकता है। मेरा कोड क्वेरी करने के लिए हमेशा के लिए ले रहा है। क्या यह एकाधिक तालिकाओं को मर्ज करने का सही तरीका है? क्या ऐसा करने का एक और अधिक कुशल तरीका है। मैं PostgreSQL 9.6.5 का उपयोग कर रहा हूँ।
SELECT
i.id, i.hdm_id, i.tos,
c.itemid, c.cid,
pr.code,
p.lag
FROM Table1 i
JOIN Table2 c ON
i.id = c.id
JOIN Table3 pr ON
c.id = pr.id
JOIN Table4 p ON
pr.id = p.id ;
4 जवाब
मैं आपकी क्वेरी को कवर करने वाले इंडेक्स बनाने की कोशिश करूंगा
create index ix_table1 on table1(id, hdm_id, tos)
create index ix_table2 on table2(id, itemid)
create index ix_table3 on table3(id, code)
create index ix_table4 on table4(id, lag)
आपको इस तरह के प्रश्न की आवश्यकता के बारे में गंभीरता से सोचना चाहिए। क्या आपको वाकई सभी डेटा चाहिए?
आपकी समस्या जॉइन नहीं है। इसमें इंडेक्स भी नहीं हैं (हालांकि वे मदद कर सकते हैं, इसलिए उन पर गौर करें)। आपकी समस्या यह है कि आप अंधाधुंध रूप से 4 तालिकाओं में शामिल हो रहे हैं और उन सभी का चयन कर रहे हैं। प्रत्येक में कितनी पंक्तियाँ हैं, इसके आधार पर निष्पादित होने में कुछ समय लगेगा।
मैं आपको सुझाव दूंगा कि आपको इन तालिकाओं से वास्तव में जो चाहिए, उसे कम करें (जैसे कि आपको WHERE कथन के साथ किस डेटा की आवश्यकता है, जहां उपयुक्त हो)।
आप Postgresql में एक Materialized View भी बना सकते हैं। यह एक सामान्य दृश्य की तरह कार्य करता है, लेकिन क्वेरी के परिणाम रन के बीच में संग्रहीत किए जाते हैं, इसलिए यदि डेटा इस बीच नहीं बदलता है तो इसके कई रन तेज होंगे। इनमें से नकारात्मक पक्ष यह है कि आप उन्हें सीधे अपडेट/डिलीट/सम्मिलित नहीं कर सकते हैं, इसलिए आपको इसे ध्यान में रखना होगा।
मैं निम्नलिखित चीजों का सुझाव दूंगा:
1) अनुक्रमणिका विखंडन की जाँच करें और यहाँ बताए गए चरणों का पालन करें - https://docs.microsoft.com/en-us/sql/relational-databases/indexes/reorganize-and-rebuild-indexes
2) जॉइन का उपयोग करते समय, आपको तालिकाओं के क्रम पर भी विचार करना चाहिए। जिस भी तालिका में रिकॉर्ड की संख्या कम है, पहले उसका उपयोग करें। तो अगले बाद में शामिल होने से फ़िल्टर करने के लिए रिकॉर्ड की संख्या कम होगी।
3) उपयुक्त अनुक्रमणिका का उपयोग करें यदि तालिका में कोई है (इस मामले में आईडी के अलावा)।
उम्मीद है ये मदद करेगा।
सादर, जॉनी
क्या आपने तालिका 1 की i.id को दूसरी तालिका i.id में सीधे शामिल करने का प्रयास किया है? आप कुछ अलग कर रहे हैं। आप Table1.id से table2.id में शामिल हों। फिर Table2.id से Table3.id तक। फिर Table3.id से Table4.id तक। तालिका 1 में सीधे शामिल होने का प्रयास करें:
SELECT
i.id, i.hdm_id, i.tos,
c.itemid, c.cid,
pr.code,
p.lag
FROM Table1 i
JOIN Table2 c ON
i.id = c.id
JOIN Table3 pr ON
i.id = pr.id
JOIN Table4 p ON
i.id = p.id ;
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।