Name Null Type
-------- -------- ---------
ID NOT NULL NUMBER(4)
GROUP_ID NUMBER(4)
TEXT CLOB
Có một chỉ số btree trên group_id
. Dưới đây là mỗi hàng group_id
có bao nhiêu hàng và tỷ lệ phần trăm tương ứng:
GROUP_ID COUNT PCT
---------------------- ---------------------- ----------------------
1 1 1
2 2 1
3 4 3
4 8 6
5 16 12
6 32 24
7 64 47
8 9 7
Tôi chạy cái này
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'TEST', cascade=>true);
Mà, nếu tôi hiểu chính xác, sẽ thu thập số liệu thống kê cho trình tối ưu hóa.
Bây giờ, tôi nhớ rằng Oracle sẽ không sử dụng chỉ mục và thực hiện quét toàn bộ bảng thay vào đó nếu nó truy xuất hơn 5% hoặc hơn tất cả các hàng. Tuy nhiên, khi tôi chạy truy vấn này, nó chỉ bắt đầu thực hiện FTS khi group_id
7, có 47% tất cả các hàng.
Đây có phải là cách nó phải được?
SELECT * FROM my_table WHERE group_id = X