Theo mặc định, tất cả các chỉ mục trong Oracle là không hợp nhất. Các chỉ mục được phân cụm duy nhất trong Oracle là chỉ mục khóa chính của các bảng được tổ chức theo chỉ mục (IOT).
Bạn có thể xác định xem một bảng có phải là IOT hay không bằng cách xem IOT_TYPE
trong ALL_TABLES
xem (khóa chính của nó có thể được xác định bằng cách truy vấn ALL_CONSTRAINTS
và ALL_CONS_COLUMNS
lượt xem).
Dưới đây là một số lý do tại sao truy vấn của bạn có thể trả về các hàng đã sắp xếp:
- Bảng của bạn được tổ chức theo chỉ mục và
FIELD
là phần chính của khóa chính. - Bảng của bạn được sắp xếp theo nhóm nhưng các hàng tình cờ được sắp xếp theo
FIELD
, điều này đôi khi xảy ra trên cột nhận dạng tăng dần.
Trường hợp 2 sẽ chỉ trả về các hàng đã sắp xếp một cách tình cờ. Thứ tự của các phần chèn không được đảm bảo, hơn nữa Oracle có thể tự do sử dụng lại các khối cũ nếu một số khối còn trống trong tương lai, làm gián đoạn trật tự mong manh.
Trường hợp 1 hầu hết thời gian sẽ trả về các hàng có thứ tự, tuy nhiên bạn không nên dựa vào nó vì thứ tự của các hàng được trả về phụ thuộc vào thuật toán của đường dẫn truy cập có thể thay đổi trong tương lai (hoặc nếu bạn thay đổi tham số DB, đặc biệt là tính song song ).
Trong cả hai trường hợp, nếu bạn muốn các hàng có thứ tự, bạn nên cung cấp mệnh đề ORDER BY:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;