Gần đây tôi đã giải thích cho các đồng nghiệp về tầm quan trọng của việc có một cột để sắp xếp dữ liệu trong bảng cơ sở dữ liệu nếu cần thiết phải làm như vậy, ví dụ như đối với dữ liệu theo thứ tự thời gian. Điều này tỏ ra hơi khó khăn vì họ có thể đơn giản chạy lại truy vấn của họ dường như vô tận và nó sẽ luôn trả về cùng một tập hợp các hàng theo cùng một thứ tự.
Tôi đã nhận thấy điều này trước đây và tất cả những gì tôi thực sự có thể làm là nhấn mạnh rằng họ tin tưởng tôi và không chỉ đơn giản cho rằng một bảng cơ sở dữ liệu sẽ hoạt động giống như một tệp CSV hoặc Excel truyền thống.
Ví dụ: thực hiện truy vấn (PostgreQuery)
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');
sẽ tạo ra một bảng với một thứ tự khái niệm rõ ràng. Chọn cùng một dữ liệu theo cách đơn giản nhất sẽ là:
SELECT * FROM mytable;
Luôn cho tôi kết quả như sau:
id | data
----+------
0 | a
1 | b
2 | c
3 | d
4 | e
5 | f
6 | g
7 | h
8 | i
9 | j
(10 rows)
Tôi có thể làm điều này nhiều lần và nó sẽ luôn trả về cho tôi cùng một dữ liệu theo cùng một thứ tự. Tuy nhiên tôi biết rằng thứ tự ngầm này có thể bị phá vỡ, tôi đã thấy nó trước đây, đặc biệt là trong các bộ dữ liệu lớn, trong đó một số giá trị ngẫu nhiên sẽ bị ném vào vị trí "sai" khi được chọn. Nhưng điều đó đã xảy ra với tôi rằng tôi không biết làm thế nào điều này xảy ra hoặc làm thế nào để tái tạo nó. Tôi cảm thấy khó khăn để có được kết quả trên Google vì truy vấn tìm kiếm có xu hướng chỉ trả lại trợ giúp chung về sắp xếp các bộ kết quả.
Vì vậy, câu hỏi của tôi về cơ bản là:
Làm cách nào tôi có thể chứng minh một cách cụ thể và cụ thể rằng thứ tự trả về của các hàng từ một truy vấn không có
ORDER BY
câu lệnh là không đáng tin cậy, tốt nhất là bằng cách gây ra và hiển thị sự cố của thứ tự ngầm ngay cả khi bảng trong câu hỏi không được cập nhật hoặc chỉnh sửa ?Liệu nó có tạo ra sự khác biệt nào không nếu dữ liệu chỉ được chèn một lần và sau đó không bao giờ được cập nhật nữa?
Tôi thích một câu trả lời dựa trên postgres vì đó là câu trả lời tôi quen thuộc nhất nhưng tôi quan tâm nhiều hơn đến chính lý thuyết này.
order by
mệnh đề vào truy vấn của họ? Họ đang cố gắng tiết kiệm lưu trữ mã nguồn? hao mòn bàn phím? mất thời gian để gõ mệnh đề đáng sợ?