Tôi đã viết một truy vấn oracle sql phức tạp và giải thích số liệu thống kê kế hoạch giống như thế này: Chi phí: 209.201 Bytes: 187.944.150 Cardinality: 409.675Oracle giải thích kế hoạch: cardinality trả về một con số khổng lồ nhưng truy vấn trả về không có hồ sơ
Bây giờ DBA đã điều chỉnh truy vấn và số liệu thống kê trông giống như sau: Chi phí: 42,996 byte: 89,874,138 Cardinality: 209,226
Câu hỏi đầu tiên của tôi là, nếu các con số thấp hơn, nó có tự động có nghĩa là hiệu suất tốt hơn không? Số nào là số tiền thích hợp nhất? Chi phí/Cardinality/Bytes? Câu hỏi thứ hai của tôi là: Tôi hiểu số lượng thẻ là số hàng được đọc. Nhưng khi tôi chạy truy vấn, nó trả về hàng '0'! Ấn tượng của tôi là rằng Cardinality phải giống nhau cho hai truy vấn được cho là trả về cùng một tập hợp kết quả. Điều này tôi đoán là sai?
Cardinality là (chỉ cần đặt) số hàng tối ưu _thinks_ sẽ là cần thiết; tùy thuộc vào nhiều yếu tố, bao gồm cả mức độ thống kê, điều đó có thể sai. – Ben
Cảm ơn. Bạn có thể giải thích BYTES là gì không? – Victor
@Kaushik: Từ tài liệu, 'BYTES' là" Ước tính theo phương pháp tối ưu hóa truy vấn của số byte được truy cập bởi thao tác ". Nhưng điều đó gây hiểu lầm, nó thực sự là số byte * trả về * bởi hoạt động. Ví dụ: nếu bạn quét toàn bộ bảng, nó sẽ đọc từng byte trong bảng, nhưng 'BYTES' là ước tính kích thước * sau * bất kỳ bộ lọc nào. http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#r22c1-t12 –