Tạo một chỉ mục theo cả hai hướng asc và desc


8

Trong vài tuần qua tôi đã nổi giận với cơ sở dữ liệu Firebird cũ. Cơ sở dữ liệu này là điên rồ vì tất cả các loại lý do, nhưng một điều tôi nhận thấy là mỗi trường duy nhất của mỗi bảng có hai chỉ mục; mỗi cái có một phân khúc duy nhất, một ascthứ tự và một descthứ tự.

Ngoài việc có một chỉ mục cho mọi lĩnh vực trong mỗi bảng, tôi còn nghĩ rằng - có bất kỳ lợi thế nào cho các chỉ mục một phân đoạn có hai chỉ mục có cùng phân khúc chỉ mục, nhưng một trong descvà một trong asckhông? Có bất cứ điều gì để đạt được, hoặc một DBMS hiện đại sẽ sử dụng ascchỉ mục và bắt đầu từ cuối và làm việc ngược lại nếu cần?

Câu trả lời:



5

Mặc dù các chỉ mục Firebird theo lý thuyết hai chiều, nhưng động cơ không thực sự sử dụng hai chiều vì hướng ngược lại không đáng tin vì thứ tự ghi của các trang: khi một trang chỉ mục bị chia tách, các liên kết giữa các trang được viết lại, nếu điều này xen kẽ với đọc ngược nó có thể đọc một liên kết vẫn đang trỏ đến trang chỉ mục cũ thay vì trang mới được thêm vào, khiến nó bỏ qua các mục chỉ mục. Điều này được giải thích trong Firebird dành cho chuyên gia cơ sở dữ liệu: Tập 3 - Tính nhất quán trên đĩa .

Vì vậy, vì tính hai chiều của chỉ mục không được đảm bảo, Firebird chỉ đọc một chỉ mục theo hướng khai báo của nó (tăng dần hoặc giảm dần). Bây giờ về lý do tại sao cơ sở dữ liệu của bạn có tất cả các chỉ mục này, tôi cho rằng người thiết kế cơ sở dữ liệu không biết mình đang làm gì hoặc anh ta cho rằng việc thêm các chỉ mục này sẽ giúp việc sắp xếp trên bất kỳ cột nào nhanh hơn.


4

Có, có một hiệu suất đáng chú ý (FB 2.5) trên một bảng lớn khi không sử dụng chỉ số giảm dần cho nghĩa là:

select first 1 * 
from mytable 
where pk_id >= 200000 
order by pk_id desc

Truy vấn này được sử dụng để tìm bản ghi trước đó, dựa trên giá trị của trường khóa chính "pk_id" (Số nguyên).


postgres chắc chắn có vấn đề này
PirateApp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.