当前位置: 首页 > news >正文

浙江网站建设前十的公司杭州高端网站设计

浙江网站建设前十的公司,杭州高端网站设计,网站建设教程平台,网站锚文本使用查询总览 ​ 所以今天我们把MySQL拆解一下#xff0c;看看里边有哪些零件。下边是MySQL的基本架构示意图。 大体来说#xff0c;MySQL分为Server层和存储引擎两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等#xff0c;涵盖 MySQL 的大多数核心服务功能看看里边有哪些零件。下边是MySQL的基本架构示意图。 大体来说MySQL分为Server层和存储引擎两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等涵盖 MySQL 的大多数核心服务功能以及所有的内置函数如日期、时间、数学和加密函数等所有跨存储引擎的功能都在这一层实现比如存储过程、触发器、视图等。 而存储引擎层负责数据的存储和提取。其架构模式是插件式的支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB它从 MySQL 5.5.5 版本开始成为了默认存储引擎。 也就是说你执行 create table 建表的时候如果不指定引擎类型默认使用的就是 InnoDB。不过你也可以通过指定存储引擎的类型来选择别的引擎比如在 create table 语句中使用 enginememory, 来指定使用内存引擎创建表。不同存储引擎的表数据存取方式不同支持的功能也不同。 从图中不难看出不同的存储引擎共用一个 Server 层也就是从连接器到执行器的部分。你可以先对每个组件的名字有个印象接下来我会结合开头提到的那条 SQL 语句带你走一遍整个执行流程依次看下每个组件的作用。 1. 连接器 你会先连接到这个数据库上这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的 mysql -h$ip -P$port -u$user -p输完命令之后你就需要在交互对话里面输入密码。虽然密码也可以直接跟在 -p 后面写在命令行中但这样可能会导致你的密码泄露。如果你连的是生产服务器强烈建议你不要这么做。 连接命令中的 mysql 是客户端工具用来跟服务端建立连接。在完成经典的 TCP 握手后连接器就要开始认证你的身份这个时候用的就是你输入的用户名和密码。 如果用户名或密码不对你就会收到一个Access denied for user的错误然后客户端程序结束执行。 如果用户名密码认证通过连接器会到权限表里面查出你拥有的权限。之后这个连接里面的权限判断逻辑都将依赖于此时读到的权限。 连接完成后如果你没有后续的动作这个连接就处于空闲状态你可以在 show processlist 命令中看到它。文本中这个图是 show processlist 的结果其中的 Command 列显示为“Sleep”的这一行就表示现在系统里面有一个空闲连接。 客户端如果太长时间没动静连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的默认值是 8 小时。 如果在连接被断开之后客户端再次发送请求的话就会收到一个错误提醒 Lost connection to MySQL server during query。这时候如果你要继续就需要重连然后再执行请求了。 数据库里面长连接是指连接成功后如果客户端持续有请求则一直使用同一个连接。 短连接则是指每次执行完很少的几次查询就断开连接下次查询再重新建立一个。 建立连接的过程通常是比较复杂的所以建议你在使用中要尽量减少建立连接的动作也就是尽量使用长连接。但是全部使用长连接后你可能会发现有些时候 MySQL 占用内存涨得特别快这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来可能导致内存占用太大被系统强行杀掉OOM从现象看就是 MySQL 异常重启了。 如何解决呢 定期断开长连接。使用一段时间或者程序里面判断执行过一个占用内存的大查询后断开连接之后要查询再重连。如果你用的是 MySQL 5.7 或更新版本可以在每次执行一个比较大的操作后通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证但是会将连接恢复到刚刚创建完时的状态。 2. 查询缓存 MySQL 拿到一个查询请求后会先到查询缓存看看之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式被直接缓存在内存中。key 是查询的语句value 是查询的结果。 如果你的查询能够直接在这个缓存中找到 key那么这个 value 就会被直接返回给客户端。如果不存在则去执行后边的流程。然后将sql语句和结果添加都缓存中。 如果查询命中缓存MySQL 不需要执行后面的复杂操作就可以直接返回结果这个效率会很高。 但是建议不要使用缓存因为只要对一个表有更新这个表对应的所有缓存就会被删除。所以像一些静态表比如系统配置表比较适合查询缓存。 3. 分析器 分析器先会做“词法分析”。 你输入的是由多个字符串和空格组成的一条 SQL 语句MySQL 需要识别出里面的字符串分别是什么代表什么。MySQL 从你输入的select这个关键字识别出来这是一个查询语句。它也要把字符串“T”识别成“表名 T”把字符串“ID”识别成“列 ID”。 做完了这些识别以后就要做“语法分析”。 根据词法分析的结果语法分析器会根据语法规则判断你输入的这个 SQL 语句是否满足 MySQL 语法。如果你的语句不对就会收到“You have an error in your SQL syntax”的错误提醒比如下面这个语句 select 少打了开头的字母“s”。 4. 优化器 经过了分析器MySQL 就知道你要做什么了。在开始执行之前还要先经过优化器的处理。优化器是在表里面有多个索引的时候决定使用哪个索引或者在一个语句有多表关联join的时候决定各个表的连接顺序。 比如你执行下面这样的语句这个语句是执行两个表的 join select * from t1 join t2 using(ID) where t1.c10 and t2.d20;既可以先从表 t1 里面取出 c10 的记录的 ID 值再根据 ID 值关联到表 t2再判断 t2 里面 d 的值是否等于 20。也可以先从表 t2 里面取出 d20 的记录的 ID 值再根据 ID 值关联到 t1再判断 t1 里面 c 的值是否等于 10。 这两种执行方法的逻辑结果是一样的但是执行的效率会有不同而优化器的作用就是决定选择使用哪一个方案。 5. 执行器 开始执行的时候要先判断一下你对这个表 T 有没有执行查询的权限 如果没有就会返回没有权限的错误。查询缓存也会判断。 如果有权限就打开表继续执行。打开表的时候执行器就会根据表的引擎定义去使用这个引擎提供的接口。比如我们这个例子中的表 T 中ID 字段没有索引那么执行器的执行流程是这样的 调用 InnoDB 引擎接口取这个表的第一行判断 ID 值是不是 10如果不是则跳过如果是则将这行存在结果集中调用引擎接口取“下一行”重复相同的判断逻辑直到取到这个表的最后一行。执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。 至此这个语句就执行完成了。 6. 小结 今天介绍了 MySQL 的逻辑架构希望你对一个 SQL 语句完整执行流程的各个阶段有了一个初步的印象。 由于篇幅的限制我只是用一个查询的例子将各个环节过了一遍。
http://www.dnsts.com.cn/news/14152.html

相关文章:

  • 有哪些做问卷调查给钱的网站市场调研公司收费标准
  • 龙岩建设局招聘网站自学考试网站建设与管理
  • 网站建设业务员转换大cent os安装wordpress
  • 购物网站建设网页推广购物网站是用什么软件做的
  • 媒体网站的品牌建设汉滨区建设局网网站
  • 外贸零售网站建设谷歌seo和百度seo区别
  • 徐州百度搜索网站排名做一个网站需要多少钱大概费用
  • 做门户网站开发的技术软件开发模型的优缺点及适用范围
  • 网站程序 制作做外贸需要自己的网站吗
  • 遵义做网站的公司智能网站建设加工
  • 技术网站模版网上商城系统代码
  • 网站建设合同书范本北京建设大厦
  • 网上110在线咨询极致优化WordPress网站速度
  • 企业网站模板下载软件做公司网站需要多
  • 开发公司与物业公司合同网站优化个人工作室
  • 网站开发 高级认证wordpress apache伪静态
  • 怎么搭建自己的电影网站电子商务网站设计与开发案例教程
  • 电子商务网站建设初学视频教程wordpress双栏
  • net和cn哪个做网站好楼盘动态
  • 企业网站设计论文摘要怎么写千库网素材免费下载
  • 呼和浩特网站建设wordpress三栏
  • 网站的优化通过什么做上去市场监督管理局官网入口
  • 魔方的网站新手开网店从哪里找货源
  • 网站后台服务网站黑白了
  • 免费建设钓鱼网站平台作风建设年网站
  • 廊坊首页霸屏优化seo工作职责
  • 网站死链接怎么处理鄂州一网
  • 手机网站开发流程图网络营销策略主要包括
  • 网站的成本进行网站建设视频教程
  • 广西建设厅微信网站在哪里可以看直播免费的