Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hitungan pemilihan postgresl (*) memakan waktu

Pernyataan kedua memakan waktu lama karena harus memindai seluruh tabel untuk menghitung baris.

Satu hal yang dapat Anda lakukan adalah menggunakan indeks:

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

Dengan asumsi bahwa id adalah kunci utama, akan jauh lebih baik menggunakan count(*) dan hilangkan INCLUDE klausa dari indeks.

Tapi yang terbaik mungkin menggunakan perkiraan:

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 = ?;

Ini menggunakan statistik distribusi untuk memperkirakan jumlah yang diinginkan.

Jika ini hanya tentang pagination, Anda tidak perlu menghitung dengan tepat.

Baca blog saya untuk informasi lebih lanjut tentang topik penghitungan di 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. Izin peran pengguna untuk modul yang berbeda menggunakan operator bitwise

  2. Pertanyaan SQL vs Kondisi di PHP

  3. Laravel Eloquent query build pilih nilai min

  4. Bagaimana cara menghitung hari antara dua tanggal di PHP?

  5. Kode kesalahan 1064, status SQL 42000:Anda memiliki kesalahan dalam sintaks SQL Anda;