ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库指令如何执行

2022-05-02 12:34:05  阅读:161  来源: 互联网

标签:语句 引擎 缓存 数据库 查询 指令 执行 连接


数据库的结构

数据库框架

数据库的结构分为:大体分为两个部分:client、server;
server包括:连接器、缓存、优化器、执行器;
以及存储引擎;
如图:

详细说明

  • 服务器
  • 存储引擎:支持数据的存储以及接口的提供,支持多种存储引擎,如InnoDB,Myisam,Memory等,Mysql5.5之后默认使用InnoDB,在创建标的时候,不指定存储引擎,默认InnoDB,也可以使用engine=memory指定,每一种存储引擎使用场景不同;
  • 连接器:客户端每一次连接的时候,它都会进行权限的验证,以及用户密码验证,可以使用一下命令连接 > mysql -h $ip -u $user -p $password,也可以使用图形界面的客户端进行连接,使用命令一般不建议直接数据密码,防止密码泄露;

mysql分为长连接和短连接,长连接连接成功后,如果客户端有请求一直会是同一个连接,短连接是执行多次查询之后会断开,重新再次连接,默认时间是8h,可以使用参数wait_timeout配置。

定期断开长连接,使用一段时间之后,或者在一个大的查询执行之后,断开重新,之后查询重新链接

如果使用的mysql5.7以及以上,可以使用mysql_restart_connection来初始化链接资源,其中是不需要重新链接和权限的验证

这里说明一下,用户连接之后,管理员再次更改用户的权限的时候,是不影响已经获取的权限的用户,仅仅在重新链接之后才会起作用

  • 分析器:一条查询语句在分析其中是要进行语法分析和词法分析,词法分析就是要分析你的字符串代表的是什么,如select 就是代表查询的意思,字符串ID分析就是对应你的列ID,

语法分析是指当你的的sql语句是够符合sql的规范,如下面使用下面语句

mysql> elect * from depart;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from depart' at line 1

由于你少打了一个s,就会保存提示You have an error in your SQL syntax;

  • 优化器:进过了分析器,知道了sql语句的含义,接下来,我们就要进行优化器的处理,一条语句的执行是有多个索引的,到底执行那个索引是由优化器来决定,比如下面的语句

select *  from  A a inner join B b on a.id=b.bid where a.name='jiepi' b.age=12

上面语句到底是查询A表的name还是B表的age,他们的执行效率是不一样的。

  • 执行器:分析器分析你要干什么,优化器分析你要怎么执行,真正的执行是在执行器中执行

一条语句的执行,在判断查询的表是否有权限,如果没有返回报错,如果有权限直接打开表,然后根据表的引擎定义,使用引擎的查询接。

select * from T where ID=10;

如上图,他的执行流程如下

调用InnoDB引擎接口取第一行,如果是就放到结果集中,否则继续第二行

调用存储引擎的接口,重复执行,直到最后一行

最后把符合的结果返回给客户端

你在查询慢日志的时候会发现有一个rows_examined的字段,他就代表的执行器扫描的行数,但是有些场景执行器调用一次,存储引擎内部会扫描多行,因此引擎扫描行和rows_examined是不一样的。

  • 缓存:缓存本是提高mysql性能的功能,当请求在缓存中命中,直接返回,但是有每一更新都会使缓存的数据失效,之前的缓存的数据就没有用了,mysql8.0已经把缓存功能去掉了,

缓存的使用在某些场景还是可以使用的,比如一些系统配置变量,我们也可以使用SQL_CACHE显示指定查询缓存,也可以使用参数query_cache_type设置成DEMAND,禁止使用缓存

select SQL_CACHE *  from dpet;

参考文

mysql 查看sql hash,执行sql语句_Mysql进阶篇--sql语句如何执行

标签:语句,引擎,缓存,数据库,查询,指令,执行,连接
来源: https://www.cnblogs.com/7xiaomao/p/16215498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有