Khi tôi thực hiện lựa chọn, liệu tôi luôn đảm bảo rằng kết quả của tôi sẽ được đặt theo khóa chính hay tôi nên chỉ định nó bằng 'thứ tự'?
Không, nó không được đảm bảo.
SELECT *
FROM table
hầu hết có thể sẽ sử dụng TABLE SCAN
không sử dụng khóa chính.
Bạn có thể sử dụng một gợi ý:
SELECT /*+ INDEX(pk_index_name) */
*
FROM table
, nhưng ngay cả trong trường hợp này, trật tự không được bảo đảm: nếu bạn sử dụng Enterprise Edition
, truy vấn có thể được song song.
Đây là một vấn đề, vì ORDER BY
không thể được sử dụng trong một điều khoản subquery SELECT
và bạn không thể viết một cái gì đó như thế này:
SELECT (
SELECT column
FROM table
WHERE rownum = 1
ORDER BY
other_column
)
FROM other_table
Bất kỳ cơ hội nào các hồ sơ sẽ được trả lại theo thứ tự của chỉ số nhóm? –
Một cơ hội rất tốt, nhưng không được bảo đảm. Truy vấn phức tạp liên quan đến kết nối, lượt xem, truy vấn phụ và các truy vấn tương tự có thể khiến tập kết quả được sắp xếp rất khác nhau. –
ANd nó có thể trở lại đôi khi inthe nhóm thứ tự chỉ mục và đôi khi không. Luôn sử dụng đơn hàng nếu bạn muốn một đơn đặt hàng cụ thể. – HLGEM