mysql必知必会第5版pdf_sql必知必会
在Oracle中,绑定变量是它的⼀⼤特⾊。绑定变量就是 在SQL语句中使⽤变量,通过不同的变量取值来改变SQL的执⾏结果。这样做的好处是能提升软解析的可能 性,不⾜之处在于可能会导致⽣成的执⾏计划不够优化,因此是否需要绑定变量还需要视情况⽽定。
举个例⼦,我们可以使⽤下⾯的查询语句:
SQL> select * from player where player_id = 10001;
你也可以使⽤绑定变量,如:
SQL> select * from player where player_id = :player_id;
这两个查询语句的效率在Oracle中是完全不同的。如果你在查询player_id = 10001之后,还会查询10002、 10003之类的数据,那么每⼀次查询都会创建⼀个新的查询解析。⽽第⼆种⽅式使⽤了绑定变量,那么在第 ⼀次查询之后,在共享池中就会存在这类查询的执⾏计划,也就是软解析。
因此我们可以通过使⽤绑定变量来减少硬解析,减少Oracle的解析⼯作量。但是这种⽅式也有缺点,使⽤动 态SQL的⽅式,因为参数不同,会导致SQL的执⾏效率不同,同时SQL优化也会⽐较困难。
2、mysql中sql是如何执⾏的?
mysql是典型的cs架构,服务器端程序使⽤mysqld。整体的mysql流程如下图所⽰。
1. 连接层:客户端和服务器端建⽴连接,客户端发送SQL⾄服务器端;
2. SQL层:对SQL语句进⾏查询处理;
3. 存储引擎层:与数据库⽂件打交道,负责数据的存储和读取。
其中SQL层与数据库⽂件的存储⽅式⽆关,我们来看下SQL层的结构:
1. 查询缓存:Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端;如果没有,就进⼊到解析器阶段。需要说明的是,因为查询缓存往往效率不⾼,所以在MySQL8.0之后就抛弃了这个功能。
解析器:在解析器中对SQL语句进⾏语法分析、语义分析。
优化器:在优化器中会确定SQL语句的执⾏路径,⽐如是根据全表检索,还是根据索引来检索等。
执⾏器:在执⾏之前需要判断该⽤户是否具备权限,如果具备权限就执⾏SQL查询并返回结果。在MySQL8.0以下的版本,如果设置了查询缓存,这时会将查询结果进⾏缓存。数据库优化sql语句
你能看到SQL语句在MySQL中的流程是:SQL语句→缓存查询→解析器→优化器→执⾏器。在⼀部分中, MySQL和Oracle执⾏SQL的原理是⼀样的。
与Oracle不同的是,MySQL的存储引擎采⽤了插件的形式,每个存储引擎都⾯向⼀种特定的数据库应⽤环 境。同时开源的MySQL还允许开发⼈员设置⾃⼰的存储引擎,下⾯是⼀些常见的存储引擎:
InnoDB存储引擎:它是MySQL 5.5.8版本之后默认的存储引擎,最⼤的特点是⽀持事务、⾏级锁定、外 键约束等。
MyISAM存储引擎:在MySQL 5.5.8版本之前是默认的存储引擎,不⽀持事务,也不⽀持外键,最⼤的特 点是速度快,占⽤资源少。
Memory存储引擎:使⽤系统内存作为存储介质,以便得到更快的响应速度。不过如果mysqld进程崩 溃,则会导致所有的数据丢失,因此我们只有当数据是临时的情况下才使⽤Memory存储引擎。
NDB存储引擎:也叫做NDB Cluster存储引擎,主要⽤于MySQL Cluster分布式集环境,类似于Oracle 的RAC集。
Archive存储引擎:它有很好的压缩机制,⽤于⽂件归档,在请求写⼊时会进⾏压缩,所以也经常⽤来做 仓库。
需要注意的是,数据库的设计在于表的设计,⽽在MySQL中每个表的设计都可以采⽤不同的存储引擎,我 们可以根据实际的数据处理需要来选择存储引擎,这也是MySQL的强⼤之处。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论