Ответ 1
PreparedStatements дает вам повышение производительности, так как то, что вы выполняете, уже хранится на стороне сервера (при условии, что вы повторно используете операторы). Вы просто связываете новые конкретные значения и повторно выполняете инструкцию.
Конструктор запросов - это более удобный способ создания строкового оператора, который должен быть выполнен, так как он не требует никакой подготовки.
С точки зрения производительности первая опция самая быстрая, вторая и третья идентичны:
// below prepared statement has already been prepared, we're now just re-using
PreparedStatement ps = session.prepare("SELECT * FROM users WHERE uname=?");
1) session.execute(ps.bind('david');
2) session.execute("SELECT * FROM users WHERE uname=david");
3) session.exectute(QueryBuilder.select()
.all()
.from("users")
.where(QueryBuilder.eq('uname', 'david'))
Не слишком уверен, что это актуально, но есть хороший пример перехода от строкового выполнения запросов с построителем запросов к использованию готовых подготовленных операторов в этом ycsb-клиенте.