❤️作者主页:小虚竹
❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆
❤️技术活,该赏
❤️点赞 👍 收藏 ⭐再看,养成习惯
PC端左侧加我微信,进社群,有送书等更多活动!
什么是prepare语句?
prepare语句实际上就是一个预编译语句,先把SQL语句进行编译,且可以设定参数占位符(例如:?符号),然后调用时通过用户变量传入具体的参数值。prepare语句有三个步骤,预编译prepare语句,执行prepare语句,释放销毁prepare语句。
且performance_schema提供了针对prepare语句的监控记录。
预编译语句的优势在于归纳为:
类似的:用变量传参做表名时,MySQL 会把变量名当做表名,这样既不是本意,也会是语法错误,在 SQL Server 的解决办法是利用字符串拼接穿插变量进行传参,再将整条 SQL 语句作为变量,最后是用 sp_executesql 调用该拼接 SQL 执行,而 Prepared SQL Statement 可谓异曲同工之妙。
use performance_schema;
select * from prepared_statements_instances;
没数据,看不了字段。难不了虚竹哥,顺便教下大家如何使用准备语句。
PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
SET @a = 3;
SET @b = 4;
EXECUTE stmt1 USING @a, @b;
第一步,使用PREPARE语句准备执行语句。该语句用于在给定了两个边的长度时,计算三角形的斜边。
第二步,声明了两个变量@a和@b;
第三步:第三,使用EXECUTE语句来执行变量@a和@b的准备语句。
这时我们就能看到统计信息了。
DEALLOCATE PREPARE stmt1;
ALTER TABLE
ALTER USER
ANALYZE TABLE
CACHE INDEX
CALL
CHANGE MASTER
CHECKSUM {TABLE | TABLES}
COMMIT
{CREATE | DROP} INDEX
{CREATE | RENAME | DROP} DATABASE
{CREATE | DROP} TABLE
{CREATE | RENAME | DROP} USER
{CREATE | DROP} VIEW
DELETE
DO
FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES
| LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES}
GRANT
INSERT
INSTALL PLUGIN
KILL
LOAD INDEX INTO CACHE
OPTIMIZE TABLE
RENAME TABLE
REPAIR TABLE
REPLACE
RESET {MASTER | SLAVE | QUERY CACHE}
REVOKE
SELECT
SET
SHOW BINLOG EVENTS
SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW}
SHOW {MASTER | BINARY} LOGS
SHOW {MASTER | SLAVE} STATUS
SLAVE {START | STOP}
TRUNCATE TABLE
UNINSTALL PLUGIN
UPDATE
# 最多允许的准备语句数量
# max_prepared_stmt_count
show variables like 'max_prepared%';
mysql官方-prepared-statements
mysql-prepare用法
SQL进阶-查询优化- performance_schema系列五:数据库对象事件与属性统计(SQL 小虚竹)
联系客服