Я думаю, он сказал, что когда вы используете подготовленные операторы, SQL-сервер может кэшировать ваш план выполнения запроса, поэтому, даже если вы измените некоторые параметры в выполняемом запросе, сервер может выбрать неправильный (возможно, кэшированный ) план выполнения, который будет выполнять очень плохо.
Он также упомянул новую функцию SQL Server 2008, которая заставляет механизм переоценивать планы выполнения, которые он использовал для преодоления этой ситуации.
С подготовленными заявлениями у меня есть только одна проблема. Рассмотрим следующий код Java:
String sql = "select * from table where name like ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "PATTERN%");
ResultSet rs = pstmt.executeQuery();
Здесь вы ожидаете, что если у вас есть индекс для таблицы (имя), он будет использоваться планом запроса. Ну, это не так. Потому что PraparedStatement должен прекомпилироваться и ожидать худшего: «% PATTERN%», например. Таким образом, это не будет оптимизировать. Мне потребовалось время, чтобы понять это. Это заставляло мою базу данных страдать. (
Надеюсь, это поможет.