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

Susan Sarandon
Lepaskan: 2024-11-02 09:41:30
asal
834 orang telah melayarinya

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!