Tôi đang làm việc trên điều kiện kết hợp giữa 2 bảng trong đó một trong các cột khớp với nhau là một giá trị tương ứng. Tôi cần phải tham gia columnA từ tableA đến 2 ký tự đầu tiên của cộtB từ tableB.Hiệu suất so sánh SQL sử dụng chuỗi con vs giống với ký tự đại diện
Tôi đã phát triển 2 câu lệnh khác nhau để xử lý điều này và tôi đã cố gắng phân tích hiệu suất của từng phương pháp.
Phương pháp 1:
ON tB.columnB like tA.columnA || '%'
Cách 2:
ON substr(tB.columnB,1,2) = tA.columnA
Kế hoạch thực hiện truy vấn có bước ít hơn rất nhiều sử dụng Phương pháp 1 so với Phương pháp 2, tuy nhiên, có vẻ như Phương pháp 2 thực hiện nhiều nhanh hơn. Ngoài ra, kế hoạch thực hiện cho thấy chỉ mục được đề xuất cho Phương pháp 2 có thể cải thiện hiệu suất của nó.
Tôi đang chạy tính năng này trên IBM iSeries, mặc dù sẽ quan tâm đến các câu trả lời theo nghĩa chung để tìm hiểu thêm về tối ưu hóa truy vấn sql.
Có nghĩa là Phương pháp 2 sẽ thực thi nhanh hơn không?
Câu hỏi SO này tương tự, nhưng có vẻ như không ai cung cấp bất kỳ câu trả lời cụ thể nào về hiệu suất của các phương pháp này: T-SQL speed comparison between LEFT() vs. LIKE operator.
PS: Thiết kế bảng yêu cầu loại tham gia này không phải là thứ tôi có thể thay đổi vào lúc này. Tôi nhận ra rằng các trường được phân cách giữ các loại dữ liệu khác nhau sẽ thích hợp hơn.
INNER hoặc OUTER JOIN? –
Điều này dành cho sự tham gia bên trong. Tham gia loại sẽ tạo sự khác biệt? – Swoop
Vâng, đó có thể là một trò chơi bị mất để đoán những gì đang xảy ra trong trình tối ưu hóa truy vấn. Nhưng có, trong trường hợp này nếu đó là phương thức INNER JOIN 1 yêu cầu tất cả tA phải được đọc trong khi phương thức 2 chỉ cần đọc tB. Tùy thuộc vào số hàng, điều đó có thể có ý nghĩa và có thể ảnh hưởng đến kế hoạch thực hiện. –