Rumah  >  Artikel  >  pangkalan data  >  Mengapa PostgreSQL Select Query Order Saya Berubah Selepas Mengemas kini Data?

Mengapa PostgreSQL Select Query Order Saya Berubah Selepas Mengemas kini Data?

Susan Sarandon
Susan Sarandonasal
2024-11-02 09:41:30836semak imbas

Why Does My PostgreSQL Select Query Order Change After Updating Data?

Urutan Baris yang tidak dapat diramalkan dalam PostgreSQL Pilih Pertanyaan Selepas Pengubahsuaian Data

Apabila melaksanakan pertanyaan SELECT tanpa menyatakan klausa ORDER BY dalam PostgreSQL, yang terhasil baris biasanya diambil mengikut susunan ia disimpan secara fizikal pada cakera. Walau bagaimanapun, pesanan lalai ini boleh berubah secara tidak dijangka selepas melakukan pengubahsuaian data seperti kemas kini atau sisipan.

Pertimbangkan contoh berikut:

postgres=# select * from check_user;
 id | name
----+------
  1 | x
  2 | y
  3 | z
  4 | a
  5 | c1
  6 | c2
  7 | c3
(7 rows)

postgres=# update check_user set name = 'c1' where name = 'c1\';
UPDATE 1

postgres=# select * from check_user;
 id | name
----+------
  1 | x
  2 | y
  3 | z
  4 | a
  6 | c2
  7 | c3
  5 | c1
(7 rows)

Sebelum mengemas kini baris 5, baris dikembalikan dalam tertib menaik oleh id. Walau bagaimanapun, selepas operasi kemas kini, kedudukan baris 5 berubah, menghasilkan susunan yang berbeza.

Penjelasan:

Tingkah laku ini disebabkan oleh mekanisme dalaman PostgreSQL untuk pengendalian penyimpanan dan pengambilan data.

  • Storan Barisan Fizikal: Baris disimpan secara fizikal pada halaman cakera. Apabila baris dikemas kini, versi baharu baris ditulis ke halaman baharu.
  • Akses Halaman: Apabila PostgreSQL membaca baris daripada jadual, ia biasanya mengambil halaman daripada cakera dalam susunan tertentu. Pesanan ini mungkin berbeza-beza berdasarkan faktor seperti penggunaan indeks dan penggunaan cache halaman.
  • Pemesanan Lalai: Tanpa klausa ORDER BY, PostgreSQL mendapatkan semula baris daripada halaman mengikut susunan yang disimpan pada mereka. muka surat. Memandangkan baris disimpan secara fizikal dalam susunan kemas kini, susunan lalai boleh berubah selepas pengubahsuaian data.

Kesimpulan:

Adalah penting untuk ambil perhatian bahawa bergantung pada tingkah laku pesanan lalai dalam PostgreSQL boleh membawa kepada hasil yang tidak dijangka. Untuk memastikan susunan baris yang konsisten, sentiasa nyatakan klausa ORDER BY eksplisit dalam pertanyaan SELECT anda. Sebagai alternatif, jika anda memerlukan susunan baris supaya konsisten selepas pengubahsuaian data, anda boleh membuat indeks pada lajur pengisihan yang diingini.

Atas ialah kandungan terperinci Mengapa PostgreSQL Select Query Order Saya Berubah Selepas Mengemas kini Data?. 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