Rumah >pangkalan data >tutorial mysql >Bagaimanakah Modul pg_trgm PostgreSQL Mendapatkan Rentetan Serupa dengan Cekap dalam Set Data Besar?

Bagaimanakah Modul pg_trgm PostgreSQL Mendapatkan Rentetan Serupa dengan Cekap dalam Set Data Besar?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 12:29:40629semak imbas

How Can PostgreSQL's pg_trgm Module Efficiently Find Similar Strings in Large Datasets?

Mencari Rentetan Serupa dengan PostgreSQL Dengan Cepat

Salah satu keperluan biasa dalam mendapatkan semula teks ialah mencari rentetan yang serupa dengan rentetan input yang diberikan . PostgreSQL menyediakan modul pg_trgm untuk tujuan ini. Walau bagaimanapun, apabila berurusan dengan set data yang besar, pendekatan brute-force untuk mengira skor persamaan untuk setiap pasangan rentetan boleh menjadi tidak cekap.

Pendekatan konvensional melibatkan penciptaan indeks GiST pada lajur nama menggunakan gist_trgm_ops sebagai pengendali indeks . Masalah dengan pendekatan ini ialah ia memerlukan pengiraan skor persamaan untuk setiap pasangan elemen, menghasilkan kerumitan masa kuadratik.

Penyelesaian yang lebih cekap ialah menggunakan operator % yang disediakan oleh pg_trgm . Dengan menetapkan parameter pg_trgm.similarity_threshold kepada nilai yang dipratentukan (mis., 0.8), pengoptimum boleh menggunakan indeks trigram GiST untuk menapis pasangan calon yang berada di bawah ambang persamaan yang ditentukan. Ini mengurangkan dengan ketara bilangan pengiraan persamaan yang diperlukan dan meningkatkan prestasi pertanyaan.

SET pg_trgm.similarity_threshold = 0.8;

SELECT similarity(n1.name, n2.name) AS sim, n1.name, n2.name
FROM   names n1
JOIN   names n2 ON n1.name <> n2.name
               AND n1.name % n2.name
ORDER  BY sim DESC;

Pertanyaan yang dioptimumkan ini menggunakan operator % untuk menapis pra pasangan calon sebelum mengira skor persamaan, meningkatkan prestasi pertanyaan dengan ketara.

Atas ialah kandungan terperinci Bagaimanakah Modul pg_trgm PostgreSQL Mendapatkan Rentetan Serupa dengan Cekap dalam Set Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn