Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menjana Lajur Berkomputer dengan Cekap dalam PostgreSQL untuk Pertanyaan Lebih Pantas?

Bagaimanakah Saya Boleh Menjana Lajur Berkomputer dengan Cekap dalam PostgreSQL untuk Pertanyaan Lebih Pantas?

Patricia Arquette
Patricia Arquetteasal
2025-01-11 18:41:41813semak imbas

How Can I Efficiently Generate Computed Columns in PostgreSQL for Faster Queries?

Mengoptimumkan Pertanyaan PostgreSQL dengan Lajur Dikira

Untuk pertanyaan yang kerap mengakses nilai terbitan daripada berbilang jadual, mencipta lajur yang dikira dalam jadual sasaran meningkatkan prestasi secara mendadak. PostgreSQL menawarkan beberapa kaedah untuk mencapai ini.

Paparan, sambil menawarkan perwakilan logik pertanyaan, tidak sesuai untuk senario kritikal prestasi kerana ia tidak menyimpan data secara fizikal.

Penyelesaian unggul ialah "lajur terhasil" PostgreSQL (tersedia dari versi 11 dan seterusnya). STORED lajur yang dijana menyimpan nilai yang dikira terus dalam jadual, memberikan prestasi yang sama seperti lajur tradisional.

Untuk versi PostgreSQL lama atau situasi di mana lajur terjana maya tidak sesuai, anda boleh mensimulasikan lajur yang dikira menggunakan fungsi. Fungsi ini menerima jenis jadual sebagai input dan mengembalikan nilai yang dikira, dengan berkesan bertindak sebagai lajur pseudo.

Mari kita ilustrasikan dengan contoh:

<code class="language-sql">CREATE TABLE tbl_a (a_id int, col1 int, col2 int);
INSERT INTO tbl_a VALUES (1,1,1), (2,2,2), (3,3,3), (4,4,4);

CREATE TABLE tbl_b (b_id int, a_id int, colx int);
INSERT INTO tbl_b VALUES
  (1,1,5),  (2,1,5),  (3,1,1)
, (4,2,8),  (5,2,8),  (6,2,6)
, (7,3,11), (8,3,11), (9,3,11);</code>

Untuk mencipta pseudo-lajur col3 menggunakan fungsi:

<code class="language-sql">CREATE FUNCTION col3(tbl_a)
  RETURNS int8
  LANGUAGE sql STABLE AS
$func$
SELECT sum(colx)
FROM   tbl_b b
WHERE  b.a_id = .a_id
$func$;</code>

Akses nilai yang dikira menggunakan sama ada notasi atribut (tbl_a.col3) atau notasi berfungsi (col3(tbl_a)), memberikan kefleksibelan pertanyaan. Ingat untuk menggunakan alias jadual untuk mengelakkan konflik penamaan.

Menggunakan lajur yang dikira atau fungsi yang dijana meminimumkan subkueri, menyelaraskan pengambilan data dan meningkatkan kelajuan pertanyaan dengan ketara. Pendekatan terbaik bergantung pada keperluan khusus anda dan versi PostgreSQL. Pertimbangan yang teliti memastikan reka bentuk pangkalan data yang cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Lajur Berkomputer dengan Cekap dalam PostgreSQL untuk Pertanyaan Lebih Pantas?. 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