PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज के साथ कर्सर, डेटा कहाँ संग्रहीत किया जाता है और डीबी को कितनी कॉल करता है

कर्सर के लिए डेटासेट पहले FETCH के निष्पादन के समय सर्वर द्वारा तैयार किया जाता है। क्लाइंट एप्लिकेशन को केवल बाद के FETCH स्टेटमेंट के परिणाम प्राप्त होते हैं।

यदि सर्वर कर्सर को बनाए रखने के लिए अनुक्रमणिका का उपयोग नहीं कर सकता है, तो अस्थायी डेटासेट बनाया जाता है। आप यह सरल परीक्षण कर सकते हैं:

create table test(i int, v text);
insert into test
select i, i::text
from generate_series(1, 5000000) i;

इस स्क्रिप्ट में दिए गए कथनों को एक-एक करके निष्पादित करें:

begin;

declare cur cursor 
for select * from test
order by random();             -- 17 ms

fetch next cur;                -- 37294 ms (*)

fetch next cur;                -- 0 ms
fetch prior cur;               -- 0 ms
fetch absolute 1000000 cur;    -- 181 ms
fetch relative 1000000 cur;    -- 163 ms
fetch first cur;               -- 0 ms
fetch last cur;                -- 0 ms

rollback;

पहला FETCH (*) लगभग उसी समय के आसपास प्रदर्शन करता है जब एक समान अस्थायी तालिका का निर्माण होता है:

create temp table temp_test as
select * from test
order by random();             -- 51684 ms

कुछ ड्राइवरों के पास क्लाइंट साइड पर कर्सर का अपना कार्यान्वयन हो सकता है। इसे ड्राइवर के दस्तावेज़ों में स्पष्ट रूप से वर्णित किया जाना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑपरेटर मौजूद नहीं है:पूर्णांक =पूर्णांक [] किसी के साथ एक प्रश्न में

  2. एकाधिक तालिकाओं पर अद्वितीय बाधा

  3. क्या एकाधिक धागे बाध्य सेट पर डुप्लिकेट अपडेट का कारण बन सकते हैं?

  4. PostgresSQL एकत्रीकरण क्वेरी प्रदर्शन में सुधार करें

  5. ट्रिगर फ़ंक्शंस में वैरिएबल सेटिंग्स का उपयोग कैसे करें?