广告
返回顶部
首页 > 资讯 > 数据库 >Mysql prepare预处理的具体使用
  • 518
分享到

Mysql prepare预处理的具体使用

2024-04-02 19:04:59 518人浏览 独家记忆
摘要

目录1.预处理2.预处理应用方式A.例子:B.预处理对执行计划变化跟踪C.存储过程包含预处理D.通过profile 查看解析语句的开销3.总结Mysql PREPARE预处理技术意义

Mysql PREPARE预处理技术意义在于,是为了减轻服务器压力的一种技术。

就是说绝大多数情况下,某需求某一条sql语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同。
比如:

  • SELECT的 WHERE子句值不同;
  • UPDATE的 SET子句值不同;
  • INSERT的 VALUES值不同;
    如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显下降。

1.预处理

mysql提供了对服务器端准备语句的支持,就叫预处理。

这种支持利用了高效的客户机/服务器二进制协议,使用带有参数值占位符的预编译语句有以下好处:

  • 减少每次执行语句时解析语句的开销。通常,数据库应用程序处理大量几乎相同的语句,只对子句中的字面值或变量值进行更改,例如用于查询和删除的WHERE、用于更新的SET和用于插入的values。
  • 防止SQL注入攻击。参数值可以包含未转义的SQL引号和分隔符。

预处理接口

1.应用程序中的预处理语句
可以通过客户端编程接口使用服务器端准备好的语句,包括用于C程序的MySQL C api客户端库,用于Java程序的MySQL Connector/J,以及用于使用。NET技术的程序的MySQL Connector/NET。例如,C API提供了一组函数调用,这些函数调用构成了它的预编译语句API

2.SQL脚本中的准备语句
还有一个用于预处理语句的替代SQL接口。但不需要编程,在SQL级别直接可用,可以在任何可以将SQL语句发送到要执行的服务器的程序中使用它,例如mysql客户端程序。

2.预处理应用方式

预处理语句的SQL语法基于三个SQL语句:

  • PREPARE语句准备执行。
  • EXECUTE执行一条预处理语句。
  • DEALLOCATE PREPARE释放一个预处理语句。

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(执行全表搜索查询的数量)变化判断是否会受到数据量变更的影响。

image.jpg

预处理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    |
。。。

存储过程之后单独调用预处理语句,返回结果集:说明预处理没有销毁

SET @a = 5; EXECUTE stmt1 USING @a; +----+------+ | id | NAME | +----+------+ | 6 | F | 。。。

D.通过profile 查看解析语句的开销

通过profile各种语句执行时间,解析语句花费的时间都在0.01秒以内。可以忽略不计。
所以目前在预处理方面上没有发现明显的优势。

image.jpg

3.总结

预编译初始的作用:

  • 提高效率:事先解析、检查、编译等工作。
  • 提高安全性:预防SQL注入

局限性和实际效果:

  • 预处理因为局限在session级别,现在无法体现真正的价值。因为mysql GA版本没有线程池概念,每个链接就是每个session
  • 解析编译语句的开销 基本对于mysql环境来说忽略不计
  • 执行计划也是随着数据量而变化的。

从局限性和实际效果来看,目前没有发挥应有的功能。不适合声场环境中使用。

到此这篇关于Mysql prepare预处理的具体使用的文章就介绍到这了,更多相关Mysql prepare预处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Mysql prepare预处理的具体使用

本文链接: https://www.lsjlt.com/news/135091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql prepare预处理的具体使用
    目录1.预处理2.预处理应用方式A.例子:B.预处理对执行计划变化跟踪C.存储过程包含预处理D.通过profile 查看解析语句的开销3.总结MySQL PREPARE预处理技术意义...
    99+
    2022-11-12
  • Mysql prepare预处理如何使用
    在MySQL中,预处理语句可以用来执行动态SQL语句,可以有效地防止SQL注入攻击,并提高SQL语句的执行效率。使用预处理语句的步骤...
    99+
    2023-08-09
    Mysql prepare
  • MySQL中预处理语句prepare、execute、deallocate怎么用
    这篇文章将为大家详细讲解有关MySQL中预处理语句prepare、execute、deallocate怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 ...
    99+
    2022-10-18
  • python灰色预测法的具体使用
    目录1.简介2.算法详解2.1生成累加数据2.2  累加后的数据表达式2.3 求解2.2的未知参数3.实例分析3.1导入数据3.2进行累加数据 ...
    99+
    2022-11-13
  • 批处理copy命令的具体使用
    目录示例单个文件的复制批量复制文件合并文件没有后缀的文件怎么复制?本文的命令说明来自与DOS命令帮助说明,如果与DOS命令帮助说明不同,请以DOS命令帮助说明为准。 语法 copy[...
    99+
    2022-11-13
  • Pillow图像颜色处理的具体使用
    目录颜色命名getrgb()方法getcolor()示例——修改证件照背景色Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,比如 RGB 格式的颜色...
    99+
    2022-11-12
  • MySQL binlog_ignore_db 参数的具体使用
    前言:  经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比...
    99+
    2022-05-10
    MySQL binlog参数 MySQL binlog MySQL binlog_ignore_db
  • MySQL ifnull()函数的具体使用
    mysql IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数。两个参数可以是文字值或表达式。 以下说...
    99+
    2022-08-11
    MySQLifnull()函数
  • Mysql CONVERT函数的具体使用
    目录1.转换指定字符集2.转换指定数据类型示例CONVERT函数用于将值转换为指定的数据类型或字符集 1.转换指定字符集 CONVERT函数用于将字符串expr的字符集变成transcoding_name 语法结构 CO...
    99+
    2022-08-12
    MysqlCONVERT函数 MysqlCONVERT
  • Mysql CAST函数的具体使用
    目录语法参数说明示例练习案例CAST函数用于将值从一种数据类型转换为表达式中指定的另一种数据类型 语法 CAST(value AS datatype) AS关键字用于分隔两个参数,在AS之前的是要处理的数据,在AS之后的...
    99+
    2022-08-12
    MysqlCAST函数 MysqlCAST
  • MySQL七大JOIN的具体使用
    目录简介练习简介 A的独有+AB的公有B的独有+AB的公有AB的公有A的独有B的独有A的独有+B的独有+AB的公有A的独有+B的独有 练习 建表 部门表 DROP TABL...
    99+
    2022-11-13
  • MySQL DQL语句的具体使用
    目录DQL基本语法基础查询条件查询语法条件案例聚合函数DQL DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。 基本语法 DQL 查询语句,语法结构如下: ...
    99+
    2023-03-22
    MySQL DQL语句 MySQL DQL
  • 批处理脚本del命令的具体使用
    1、del 命令帮助文档如下 C:\Users\Administrator>help del 删除一个或数个文件。 DEL [/P] [/F] [/S] [/Q] [/A[...
    99+
    2022-11-13
  • MySQL内外连接的具体使用
    目录内连接外连接左外连接右外连接简单案例MySQL内外连接 表的连接分为内连接和外连接。 内连接 内连接 内连接的SQL如下: SELECT ... FROM t1 INNE...
    99+
    2023-01-28
    MySQL内外连接
  • MySQL窗口函数的具体使用
    目录一、什么是窗口函数1、怎么理解窗口?2、什么是窗口函数二、窗口函数用法1、序号函数:row_number() / rank() / dense_rank()2、分布函数:...
    99+
    2022-11-12
  • MySQL索引查询的具体使用
    目录索引的分类聚簇索引非聚簇索引实战理解我们都知道MySQL的辅助索引可以提升检索效率,但是为什么有的时候,走辅助索引反而不如走主键索引的效率高呢?这里我觉得需要先弄懂辅助索引的底层...
    99+
    2023-05-19
    MySQL索引查询 MySQL索引
  • golang mysql的连接池的具体使用
    目录1.mysql-通过sql建立连接池2.mysql-gorm 建立连接池3.连接池相较于单个client4.通用连接池参考1.mysql-通过sql建立连接池 连接池用sql.Open函数创建连接池,可是此时只是初始...
    99+
    2023-02-21
    golangmysql连接池 golang连接池
  • Nginx代理Partainer的具体使用
    目录1. 启动nginx2. 启动portainer3. 创建网络主要目的用于通过nginx可以代理 Partainer服务,通过nginx进行统一转发 1. 启动nginx 启动n...
    99+
    2023-03-06
    Nginx代理Partainer Nginx Partainer代理
  • MySQL校对规则(COLLATION)的具体使用
    目录简介mysql的校对规则校对规则列举 查看校对规则修改校对规则总结:简介 本文介绍MySQL的校对规则。 MySQL的校对规则 两个不同的字符集不能有相同的校对规则。每个字符集有一个默认校对规则。例如:ut...
    99+
    2022-08-09
    MySQL校对规则
  • MySQL内部临时表的具体使用
    目录UNION表初始化执行语句UNION RESULTUNION ALLGROUP BY内存充足执行语句执行过程排序过程ORDER BY NULL内存不足执行...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作