Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tham gia mất quá nhiều thời gian

Nhìn vào tất cả các trường liên quan, một chỉ mục bao gồm trên mỗi bảng sẽ bao gồm các cột có thể

t1: Y, F, H, A
t2: X, G, C, D, E

Mức độ chọn lọc BẤT KỲ tiêu chí nào:t2.X, t2.G hoặc t1.Y, t1.F, t1.H?

Nếu không có cột nào trong số các cột riêng lẻ đủ chọn lọc (lý tưởng là 0,5% hoặc ít hơn), bạn có thể muốn tạo một hoặc một số chỉ mục bao gồm nhiều cột, ví dụ:

t2 (G, X)
t1 (H, F, Y)

Lưu ý: Thứ tự của các cột trong một chỉ mục là rất quan trọng - trước tiên hãy luôn đặt các cột có tính chọn lọc cao nhất (thứ phân chia dữ liệu cột thành các tập hợp khác biệt nhất).

Với chi phí lưu trữ, bạn có thể đặt chỉ mục COVER cho truy vấn bằng cách cung cấp tất cả các cột cần thiết trong chính chỉ mục. Điều này có nghĩa là truy vấn không cần quay lại dữ liệu bảng.

create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)

CHỈNH SỬA

Có vẻ như tôi đã bỏ qua SQL Server DDL trong đó. Trong Oracle, bạn sẽ phải mở rộng chỉ mục để trở thành t2 (G, X, C, D, E) - nhưng điều đó làm tăng yêu cầu chọn lọc đối với việc sử dụng chỉ mục vì khóa chỉ mục trở nên rất dài.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00947:Không đủ giá trị

  2. Thay đổi tiêu đề trang dựa trên mục trong Oracle APEX 4.0

  3. Cập nhật một cột của cùng một bảng nếu có bản ghi trùng lặp

  4. ORA-29908:thiếu lời gọi chính cho toán tử phụ

  5. PL / SQL, làm thế nào để thoát khỏi dấu nháy đơn trong một chuỗi?