Chúng ta cần thêm một priority
cột vào bảng bị tấn công khoảng 250 lần một giây, khoảng 170 lượt chọn, 125 lần chèn và 60 cập nhật. Cột sẽ là một đơn giản number(1)
.
Điều priority
này không quan trọng đối với các phần chèn hoặc cập nhật, tức là không phải là một phần của khóa chính, mà tôi sẽ thi hành riêng.
Về cơ bản, chúng tôi không muốn thực hiện order by
quét trên phạm vi 170 lần một giây, vì số lượng được thực hiện sẽ giảm ồ ạt.
Liệu một chỉ số bảng được tổ chức đảm bảo rằng priority = 1
sẽ luôn luôn đến trước priority = 9
khi chạy truy vấn sau đây:
select *
from my_table
where rownum < 2
Đối với ngữ cảnh nhiều hơn một truy vấn điển hình sẽ là:
select *
from my_table
where mod(to_number(to_char(tstamp,'ss')),1) = 0
and done is null
and country = 'gbr'
and rownum < 2
Ràng buộc pk, đối với IOT, sẽ trở thành priority, rest of the pk
một ràng buộc riêng đối với pk chỉ dành cho cấu trúc. done
là null trong khoảng 99% của bảng vì vậy dù sao điều này không được chọn nhiều lắm.
Chỉ số chính được sử dụng là, tôi nghĩ rằng, country, done, to_number(to_char(tstamp,'ss')
chúng tôi đã thử nghiệm khoảng 20 kết hợp và điều này đã dẫn đầu trong một chặng đường dài.
Tôi hoàn toàn không muốn thêm bất cứ lúc nào vào các truy vấn này, 0,01sa ngày được thêm bởi select là 41 phút mỗi ngày. Chúng tôi muốn giải quyết "đủ tốt" hơn là hoàn hảo.
priority
vào IOT như một cột hàng đầu?
ORDER BY priority
(như trong ví dụ của Jack), bạn có thấy cácSELECT
truy vấn của mình chạy chậm hơn nhiều không? Những chỉ số nào bạn có trên bàn?