在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
MySQL PREPARE预处理技术意义在于,是为了减轻服务器压力的一种技术。 就是说绝大多数情况下,某需求某一条SQL语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同。
1.预处理MySQL提供了对服务器端准备语句的支持,就叫预处理。 这种支持利用了高效的客户机/服务器二进制协议,使用带有参数值占位符的预编译语句有以下好处:
预处理接口 1.应用程序中的预处理语句 2.SQL脚本中的准备语句 2.预处理应用方式预处理语句的SQL语法基于三个SQL语句:
A.例子:预处理语句无法跨SESSION操作: mysql>CREATE TABLE `t1` ( `id` int NOT NULL, NAME varchar(20), KEY `idx_id` (`id`) ) ENGINE=InnoDB ; mysql>INSERT INTO t1(id,name) values(1,'A'),(2,'B'),(3,'C'),(4,'D'),(5,'E'),(6,'F'); #设定预处理语句 mysql>PREPARE stmt1 FROM 'SELECT * FROM t1 WHERE a=? '; #设置传递变量 mysql>SET @a = 8; #执行语句 mysql>EXECUTE stmt1 USING @a; #释放预处理语句 mysql>DEALLOCATE PREPAR stmt1; B.预处理对执行计划变化跟踪通过观察status指标Select_scan(执行全表搜索查询的数量)变化判断是否会受到数据量变更的影响。 预处理sql语句随着数据量的变化执行计划也在变更。 C.存储过程包含预处理预处理语句在存储的例程中创建预处理语句,则在存储的例程结束时不会释放该语句。 DELIMITER // DROP PROCEDURE IF EXISTS proc_prepared; CREATE PROCEDURE proc_prepared() BEGIN DECLARE a INT; DECLARE i INT; PREPARE stmt1 FROM 'SELECT * FROM t1 WHERE id>? '; SET @a = 5; EXECUTE stmt1 USING @a; END // DELIMITER ; call proc_prepared(); 存储过程之后单独调用预处理语句,返回结果集:说明预处理没有销毁 SET @a = 5; EXECUTE stmt1 USING @a; +----+------+ | id | NAME | +----+------+ | 6 | F | 。。。 存储过程之后单独调用预处理语句,返回结果集:说明预处理没有销毁
D.通过profile 查看解析语句的开销通过profile各种语句执行时间,解析语句花费的时间都在0.01秒以内。可以忽略不计。 3.总结预编译初始的作用:
局限性和实际效果:
从局限性和实际效果来看,目前没有发挥应有的功能。不适合声场环境中使用。 到此这篇关于Mysql prepare预处理的具体使用的文章就介绍到这了,更多相关Mysql prepare预处理内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论