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

Postgresl चयन गिनती (*) समय लेने वाली

दूसरे कथन में लंबा समय लगता है क्योंकि पंक्तियों को गिनने के लिए उसे पूरी तालिका को स्कैन करना पड़ता है।

एक चीज जो आप कर सकते हैं वह है एक इंडेक्स का उपयोग करना:

CREATE INDEX ON tbl_oplog (deleted) INCLUDE (id);
VACUUM tbl_oplog;  -- so you get an index only scan

मान लें कि id प्राथमिक कुंजी है, इसका उपयोग करना बेहतर होगा count(*) और INCLUDE . को छोड़ दें इंडेक्स से क्लॉज।

लेकिन अनुमान का उपयोग करना शायद सबसे अच्छा है:

SELECT t.reltuples * freq.f AS estimated_rows
FROM pg_stats AS s
   JOIN pg_namespace AS n
      ON s.schemaname = n.nspname
   JOIN pg_class AS t
      ON s.tablename = t.relname
         AND n.oid = t.relnamespace
   CROSS JOIN LATERAL
      unnest(s.most_common_vals::text::boolean[]) WITH ORDINALITY AS val(v,id)
   JOIN LATERAL
      unnest(s.most_common_freqs) WITH ORDINALITY AS freq(f,id)
         USING (id)
WHERE s.tablename = 'tbl_oplog'
  AND s.attname = 'deleted'
  AND val.v = ?;

यह वांछित गणना का अनुमान लगाने के लिए वितरण आंकड़ों का उपयोग करता है।

यदि यह केवल पृष्ठ पर अंक लगाने के बारे में है, तो आपको सटीक गणना की आवश्यकता नहीं है।

पढ़ें मेरा ब्लॉग PostgreSQL में गिनती के विषय पर अधिक जानकारी के लिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं उन पंक्तियों की संख्या कैसे गिन सकता हूं जो एक MySQL क्वेरी लौटाती हैं?

  2. MySQL के स्लो-क्वेरी लॉग में समय की इकाई क्या है?

  3. विजुअल स्टूडियो 2012/2013 के लिए MySQL

  4. एक MySQL डेटाबेस से Jquery, AJAX और PHP के साथ डेटा पुनर्प्राप्त करना

  5. कुल कार्यों के साथ एक MySQL क्वेरी में समूहीकृत रिकॉर्ड का पहला और अंतिम रिकॉर्ड कैसे प्राप्त करें?