BETWEEN
nên vượt trội hơn IN
trong trường hợp này (nhưng làm đo lường và kiểm tra các kế hoạch thực thi!), đặc biệt là n
ngày càng tăng và khi số liệu thống kê vẫn chính xác. Giả sử:
-
m
là kích thước của bàn của bạn -
n
là kích thước trong phạm vi của bạn
Chỉ mục có thể được sử dụng (n
nhỏ so với m
)
-
Về lý thuyết,
BETWEEN
có thể được triển khai bằng một lần "quét phạm vi" (Oracle speak) trên chỉ mục khóa chính và sau đó duyệt qua nhiều nhấtn
các nút lá chỉ mục. Độ phức tạp sẽ làO(n + log m)
-
IN
thường được triển khai dưới dạng một chuỗi (vòng lặp)n
"quét phạm vi" trên chỉ mục khóa chính. Vớim
là kích thước của bảng, độ phức tạp sẽ luôn làO(n * log m)
... điều này luôn tệ hơn (không di động đối với các bảng rất nhỏm
hoặc phạm vi rất nhỏn
)
Không thể sử dụng chỉ mục (n
là một phần quan trọng của m
)
Trong mọi trường hợp, bạn sẽ quét toàn bộ bảng và đánh giá vị từ trên mỗi hàng:
-
BETWEEN
cần đánh giá hai vị từ:Một cho giới hạn dưới và một cho giới hạn trên. Độ phức tạp làO(m)
-
IN
cần đánh giá nhiều nhấtn
các vị ngữ. Độ phức tạp làO(m * n)
... một lần nữa luôn tệ hơn, hoặc có lẽO(m)
nếu cơ sở dữ liệu có thể tối ưu hóaIN
danh sách là một bản đồ băm, thay vì một danh sách các vị từ.