Baru-baru ini saya menjelaskan kepada rekan-rekan tentang pentingnya memiliki kolom yang digunakan untuk mengurutkan data dalam tabel database jika perlu, misalnya untuk data yang dipesan secara kronologis. Ini terbukti agak sulit karena mereka bisa menjalankan kembali kueri mereka tanpa henti dan selalu akan mengembalikan rangkaian baris yang sama dalam urutan yang sama.
Saya telah memperhatikan ini sebelumnya dan semua yang bisa saya lakukan adalah bersikeras bahwa mereka mempercayai saya dan tidak hanya berasumsi bahwa tabel database akan berperilaku seperti file CSV atau Excel tradisional.
Misalnya, menjalankan kueri (PostgreSQL)
create table mytable (
id INTEGER PRIMARY KEY,
data TEXT
);
INSERT INTO mytable VALUES
(0, 'a'),
(1, 'b'),
(2, 'c'),
(3, 'd'),
(4, 'e'),
(5, 'f'),
(6, 'g'),
(7, 'h'),
(8, 'i'),
(9, 'j');
akan membuat tabel dengan urutan konseptual yang jelas. Memilih data yang sama dengan cara paling sederhana adalah:
SELECT * FROM mytable;
Selalu memberi saya hasil berikut:
id | data
----+------
0 | a
1 | b
2 | c
3 | d
4 | e
5 | f
6 | g
7 | h
8 | i
9 | j
(10 rows)
Saya bisa melakukan ini berulang-ulang dan itu akan selalu mengembalikan kepada saya data yang sama dalam urutan yang sama. Namun saya tahu bahwa urutan implisit ini dapat dipatahkan, saya telah melihatnya sebelumnya, terutama dalam dataset besar, di mana beberapa nilai acak akan terlempar ke tempat "salah" ketika dipilih. Tetapi saya sadar bahwa saya tidak tahu bagaimana ini terjadi atau bagaimana memperbanyaknya. Saya merasa sulit untuk mendapatkan hasil di Google karena permintaan pencarian cenderung hanya mengembalikan bantuan umum pada pengurutan set hasil.
Jadi, pertanyaan saya pada dasarnya adalah ini:
Bagaimana saya dapat membuktikan dan secara konkret membuktikan bahwa urutan pengembalian baris dari permintaan tanpa
ORDER BY
pernyataan tidak dapat diandalkan, lebih disukai dengan menyebabkan dan menampilkan rincian urutan implisit bahkan ketika tabel tersebut tidak diperbarui atau diedit ?Apakah ada bedanya sama sekali jika data hanya dimasukkan sekali secara massal dan kemudian tidak pernah diperbarui lagi?
Saya lebih suka jawaban berbasis postgres karena itu yang paling saya kenal tetapi saya lebih tertarik pada teori itu sendiri.
order by
klausa ke pertanyaan mereka? Apakah mereka mencoba menghemat penyimpanan kode sumber? keausan keyboard? waktu yang dibutuhkan untuk mengetik klausa yang ditakuti?