预准备语句
自 3.2 版本起,StarRocks 提供预准备语句(prepared statement),用于多次执行结构相同、仅 部分变量不同的 SQL 语句,能显著提升执行效率,并且还能防止 SQL 注入。
功能
工作流程
- 预准备:准备 SQL 语句。语句中的变量用占位符
?
表示。FE 解析语句并生成执行计划。 - 执行:声明变量后,将变量传递至语句中并执行语句。并且可以使用不同的变量多次执行该语句。
优势
- 节省解析 SQL 语句的开销。业务中应用程序通常会使用不同变量多次执行结构相同的语句。使用预准备语句后,StarRocks 只需要在预准备阶段解析一次语句,后续多次执行相同语句(变量不同)时直接使用解析结果,因此能显著提高语句(特别是复杂语句)执行性能。
- 防止 SQL 注入攻击。分离了语句和变量,将用户输入的数据作为参数进行传递,而不是将其直接拼接到语句中。这样可以防止恶意用户利用输入来执行恶意的 SQL 代码。
使用说明
预准备语句仅在当前会话中生效,不适用于其他会话。当前会话退出后,所创建预准备语句会自动删除。
语法
预准备语句如下:
- PREPARE:准备 SQL 语句,语句中变量用占位符
?
表示。 - SET:声明语句中的变量。
- EXECUTE:传递已声明的变量并执行语句。
- DROP PREPARE 或 DEALLOCATE PREPARE:删除预准备语句。