Phần quan trọng nhất của quá trình biên dịch là tạo ra kế hoạch truy vấn. Kế hoạch truy vấn, như tên cho thấy, cho biết cơ sở dữ liệu nên thực hiện truy vấn như thế nào (ví dụ: chỉ mục để sử dụng, các loại tham gia để sử dụng như tham số lồng nhau/băm/hợp nhất, v.v.). Điều này có thể mất thời gian khi cơ sở dữ liệu cần phân tích thông tin trên các bảng để đoán đúng về những gì là tối ưu (ví dụ: kích thước bảng, chỉ mục có sẵn, chỉ mục cụ thể, v.v ...).
Trong khi các câu lệnh chuẩn bị có thể tiết kiệm thời gian bạn phải cẩn thận vì đôi khi chúng có thể làm cho chương trình của bạn chậm hơn. Tại sao? Bởi vì không cung cấp giá trị mệnh đề where như là một phần của trình biên dịch, cơ sở dữ liệu phải đoán các giá trị bạn sẽ cung cấp và nó có thể chọn các giá trị dẫn đến một kế hoạch truy vấn tối ưu cho bạn.
Điều này có thể rõ ràng nhất đối với các truy vấn phạm vi. Ví dụ: giả sử bạn tạo một câu lệnh đã chuẩn bị với ngày tối thiểu và tối đa làm tham số. Truy vấn này bạn sẽ sử dụng để truy xuất một vài ngày giao dịch. Với phạm vi ngày nhỏ, truy vấn này có thể hiệu quả nhất để thực thi nếu cơ sở dữ liệu sử dụng chỉ mục ngày không được nhóm.
Tuy nhiên, vì cơ sở dữ liệu không biết bạn sẽ cung cấp thông số nào cho một phạm vi ngày lớn hơn nhiều (ví dụ: một năm trở lên). Trong trường hợp này, sử dụng câu lệnh đã chuẩn bị sẽ làm chậm chương trình của bạn (trừ khi bạn cung cấp gợi ý cho cơ sở dữ liệu về những tham số nào để tối ưu hóa hoặc chỉ rõ các chỉ mục nào sẽ sử dụng). Tất nhiên nếu trong tuyên bố chuẩn bị của bạn, các thông số bạn cung cấp sẽ trỏ đến các bản ghi riêng lẻ (ví dụ: các khóa duy nhất trên bảng), cơ sở dữ liệu thực sự không thể sai khi tạo kế hoạch truy vấn.
Tôi đoán tôi đang cố gắng nhấn mạnh rằng có những ưu và nhược điểm ở đây. PreparedStatements có thể nhanh hơn trong một số tình huống nhưng bạn phải cẩn thận.
Tốt chi tiết về Pre-biên soạn: [http://stackoverflow.com/questions/5497297/what-does-pre-compiling-a-jdbc-preparedstatement-do][1] [1]: http: // stackoverflow.com/questions/5497297/what-does-pre-compiling-a-jdbc-preparedstatement-do – Awan