精华内容
下载资源
问答
  • MySQL 是怎样运行的:从根儿上理解 MySQL小孩子 著12 小时 · 25 小节从根儿上理解 MySQL,让 MySQL 不再是一个黑盒小册内容小册介绍MySQL...
        

    640?wx_fmt=png

    MySQL 是怎样运行的:从根儿上理解 MySQL

    小孩子 著

    12 小时 · 25 小节 

    从根儿上理解 MySQL,让 MySQL 不再是一个黑盒

    小册内容

    640?wx_fmt=jpeg

    小册介绍

    MySQL凭借着它还不错的性能、还不错的稳定性常年稳居老二宝座,当然最大的优势就是它不要钱,还开源,这让它成为大部分中小型公司,尤其是互联网公司首选的数据库(近年来越来越多的大公司也在尝试将业务转移到这种不要钱的数据库上来)。

    越来越多的DBA和后端同学在工作中少不了和MySQL打交道,为什么这个SQL执行的这么慢?为什么明明我建了索引但查询计划显示没用?为什么我的IN查询里的参数一多就不使用索引了?为什么突然我的数据就成了乱码?到底应不应该使用连接查询?吧啦吧啦一大堆。在面试中MySQL的一些知识更成为躲不过的问题,比如索引结构、MVCC、隔离级别的实现、锁的使用等等等等都成为了面试考题重灾区。

    其实对于工程技术人员来说,大部分接触的所谓技术是没那么需要智商的,只是需要讲解这些技术的同学稍微切换一个角度,切换到小白的角度而不是站在一个上帝视角去讲述问题,那些看起来非常高深复杂的问题其实都是为了一个非常简单的初衷而不得不采用的设计。我的任务就是带着大家从非常简单的问题出发,在解决问题的路上我们会遇到一些麻烦,由这些麻烦我们会很自然的引入一些新的概念,我会不断的向大家强化这些新概念,当我确保大家已经完全掌握了这些新概念后,会基于这些新概念再引入一些更为复杂的问题。高楼大厦虽然雄伟,解构之后不过是钢筋水泥。当然这个过程我会适当的给大家加点儿料,扯扯犊子,让大家像读小说一样接受这些MySQL的核心概念。

    小册的套路

    我们相信,只要向大家有节奏的展示足够多的技术细节,那么整个学习过程将会变得流畅平滑,MySQL的面纱也会慢慢的被摘下。所以我们在后续介绍MySQL运行过程中需要用到的各种结构时会尽力向大家解释清楚每个字节都是干嘛用的,某几部分组合起来会有什么样的效果等等。

    对于一些比较复杂的概念时,我们不准备使用概念先行方式进行讲解,也就是先给大家提出一个概念,然后介绍这个概念有什么什么属性,每个属性又有什么什么特点,每个特点又有什么什么的用法。我们在解释比较复杂的问题时会按照下边的套路出发:

    • 我们遇到了什么问题;

    • 为了解决问题提出了什么概念;

    • 这个概念在MySQL中又有哪些需要注意的地方。

    也就是:不先讲是什么,先讲为什么

    覆盖的内容

    本小册致力于覆盖大家工作和面试过程中最常遇到的MySQL的一些核心概念,共划分为4个部分,各部分简介如下:

    640?wx_fmt=jpeg

    有时候使用语言表述一个东西太抽象,一图胜千言,所以我们在各种可能让大家迷糊的地方画了各种对应的图示,整个小册用到的图片有上百张之多(其实我背地里画了 200 多张图片),象征性的贴几张:

    全是图

    • Compact行格式示意图:

      640?wx_fmt=other
    • 表空间结构示意图:

      640?wx_fmt=other
    • 单表查询中根据二级索引访问的示意图:

      640?wx_fmt=other

    作者介绍

    640?wx_fmt=png

    小孩子:前在线教育公司「跟谁学」后端工程师,公众号「我们都是小青蛙」作者,喜欢研究源码,觉得把复杂的问题讲清楚是一件很牛逼的事儿。

    你会学到什么?

    • MySQL 的一些基本概念;

    • 如何处理使用 MySQL 过程中的乱码问题;

    • 从根儿上理解 InnoDB 存储引擎是如何存储记录、数据页,以及由页作为节点组成的B+树索引的原理;

    • 理解 InnoDB 存储引擎的表空间概念,知道 InnoDB 是如何管理段、区、页这些玩意儿以及 InnoDB 的数据字典;

    • 理解 MySQL 是如何执行单表查询、如何执行连接查询;

    • 理解 MySQL 基于代价的优化和基于规则的优化到底是啥意思;

    • 知道如何查看自己写的查询语句是好是坏,学会使用optimizer tracer;

    • 理解为什么需要事务以及它的基本概念;

    • redo 和 undo 日志的作用以及在 MySQL 中这些日志的细节;

    • 理解并发带来的各种问题以及 MySQL 中使用锁的各种细节;

    • 理解学习的快乐,希望各位看完本小册就像是读完一本小说一样畅快淋漓。

    适宜人群

    1. 刚刚学完 SQL 基础的学生同学们;

    2. 被数据库问题折磨的求职者们;

    3. 天天被 DBA 逼着优化 SQL 的业务开发小伙伴;

    4. 菜鸟 DBA 和不是非常菜的 DBA 小伙伴;

    5. 对 MySQL 内核有强烈兴趣但看源码一脸懵逼的小伙伴。

    名人推荐

    640?wx_fmt=png

    八折优惠

    640?wx_fmt=jpeg

    扫不上码,可以点击左下角「阅读原文」

    展开全文
  •   最近看了小孩子4919写的《MySQL是怎样运行的》,重新认识了MySQL,下面做一个总结。佩服作者有勇气辞职在家去写作,干自己喜欢的事情。之前掘金就买了作者的小册子,献上微薄之力支持。 MySQL的客户端/服务器...


      最近看了小孩子4919写的《MySQL是怎样运行的》,重新认识了MySQL,下面做一个总结。佩服作者有勇气辞职在家去写作,干自己喜欢的事情。之前掘金就买了作者的小册子,献上微薄之力支持。

    MySQL的客户端/服务器架构

      我们使用的微信App就是由客户端和服务器组成的。聊天的时候,客户端将用户发送的消息包装后发送给微信服务器,然后微信服务器根据收到的包装好的信息将消息发送给接收者。
      MYSQL的运行过程类似,它的服务端程序也可以连接多个客户端,客户端需要通过用户名密码登录服务器以后才能向服务器发送请求。服务器程序根据客户端发送的CRUD请求直接与要存储的数据打交道,对数据做出相应的处理并将结果返回给客户端。

    MySQL的安装

      以mac为例,安装好MySQL以后在安装目录下的bin目录中存放着许多可执行文件,执行这些可执行文件可以通过使用这些文件的相对/绝对路径来执行。例如当前在安装目录(/usr/local/mysql),要执行bin目录下的mysqld的可执行文件。

    #使用相对路径执行
    ./bin/mysqld
    #使用绝对路径
    /usr/local/mysql/bin/mysqld
    

    启动MySQL服务器程序

      Mac中用来启动MySQL服务器程序的可执行文件很多,且大部分都位于MySQL安装目录的bin目录下。

    1. mysqld
        mysqld可执行文件就表示MySQL服务器程序,运行它就可以直接启动一个MySQL服务器进程,但并不常用。
    2. mysqld_safe
        mysqld_safe是一个启动脚本,他会间接调用mysqld并持续关注服务器的运行状态。当服务器进程出现错误时,它还可以帮助重启服务器程序,并且可以将出错信息和其他诊断信息输出到错误日志中。
    3. mysql_server
        mysql_server也是一个启动脚本,它间接地调用mysqld_safe。mysql_server其实是一个链接文件,它对应的实际文件是…/support-files/mysql.server。安装MySQL时如果没有自动安装这个脚本则需要手动安装。
    #启动服务器程序
    mysql_server start
    #关闭正在运行的服务器程序
    mysql_server stop
    
    1. mysqld_multi
        其实一台计算机可以运行多个服务器实例,mysqld_multi可执行文件可以启动或停止多个可执行文件,也能报告他们的运行状态。

    启动MySQL客户端程序

      在成功启动服务器程序后,就可以启动客户端程序来连接到这个服务器了。通过mysql这个可执行程序我们可以与服务器程序进行交互。

    mysql -h主机名 -u用户名 -p密码
    

    各参数之间无先后顺序:
      -h:等同于--host= 主机名,表示服务器程序所在计算机的IP或者域名,如果服务器程序运行在本机则可以省略,也可使用localhost或127.0.0.1代替。
      -u:等同于--user= 用户名,表示用户名。
      -p:等同于--password= 密码,表示密码。

    连接成功后我们可以通过在mysql>提示符后面输入以下任一命令退出登录:

    • quit
    • exit
    • \q

    注意事项:

    1、如果客户端在登录时通过一行显示输入密码就被同一台机器的其他用户通过ps之类的命令看到,所以并不安全,可以直接-p回车然后再输入密码。
    2、显式输入密码时,-p和密码之间不能用空白字符,否则可能会导致服务器将密码当作数据库名称来对待。
    3、Mac中省略-u的话会将登录操作系统的用户名当作MySQL的用户名去处理。

    客户端与服务器连接的过程

      运行中的服务器程序和客户端程序本质上都是计算机中的一个进程,所以客户端程序向服务器程序发送请求并得到响应的过程本质上是一个进程间通信的过程。MySQL支持下面几种通信方式。

    TCP/IP

      MySQL采用TCP作为服务器和客户端之间的网络通信协议。在网络环境下,每台计算机都有唯一的IP地址,如果某个进程需要采用TCP协议进行网络通信,就可以向操作系统申请一个端口号(范围:0~65535)。其他进程就可以通过IP+端口的方式与这个进程建立连接了。
      MySQL服务器启动时默认申请3306端口,如果3306端口刚好被占用或者我们想自定义该服务器进程监听的端口号,可以通过在启动服务器程序的命令行中添加-P参数来明确指定端口号。

    mysqld -P3307
    
    #也可以在通过命令启动客户端程序时通过使用-P参数指定要连接的端口号
    mysqld -h127.0.0.1 -uroot -P3307 -p
    

    命名管道和共享内存

      命名管道和共享内存是Windows操作系统中的两种进程间通信方式。使用他们需要在启动服务器程序和客户端程序时添加一些参数。

    • 使用命名管道进行进程间通信:需要在启动服务器程序的命令中加上--enable-named-pipe参数,在启动客户端程序的命令中加上--pipe或者--protocol=pipe参数。
    • 使用共享内存进行进程间通信:要求服务器进程和客户端进程必须位于同一台Windows主机,需要在启动服务器程序的命令中加上--shared-memory参数,在成功启动服务器后,共享内存便成为本地客户端程序的默认连接方式。也可以在启动客户端程序的命令中加上--protocol=memory参数来显式指定使用共享内存进行通行。

    UNIX域套接字

      如果服务器进程和客户端进程运行在同一台类UNIX操作系统上,则可以使用UNIX域套接字进行进程间的通信。如果在启动客户端程序时没有指定主机名,或者指定的主机名为localhost,又或者指定了--protocol=socket的启动参数,那么服务器程序和客户端程序就可以通过UNIX域套接字进行通信了。

    服务端处理客户端请求

      服务器程序在处理客户端的请求时大致分为3部分:连接管理、解析与优化、存储引擎。

    连接管理

      客户端进程通过以上几种进程间通信方式与服务器进程建立连接。每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互;当客户端退出连接时,服务器并不会立即将该线程销毁,而是将它缓存起来,在另一个新的客户端进行连接时,将该线程分配给新的客户端。这样就通过减少创建销毁线程而节省了开销。由于分配太多线程会严重影响系统的性能。所以我们需要限制可以同时连接到服务器的客户端数量。
      在客户端程序发起连接时,需要携带主机信息、用户名、密码等信息,服务器程序会这些信息进行认证,认证失败则拒绝连接。当客户端程序和服务端程序不运行在一台机器上时,我们可以通过采用传输层安全性(Transport Layer Security,TLS)协议对连接进行加密来保证数据传输的安全性。
      当连接建立后,与该客户端关联的服务器线程会一直等待客户端发送过来的请求。MySQL服务器接收到的请求只是一个文本信息,该文本信息还要经过各种处理。

    解析与优化

    查询缓存

      MySQL服务器程序会讲刚刚处理过的查询请求和结果缓存起来,如果下一次有同样的请求过来则直接从缓存中查找结果。这个查询缓存可以在不同的客户端之间共享。如果两个查询请求有任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不命中。另外,如果查询请求中包含某些系统函数、用户自定义变量和函数、系统表,如mysql、information_schema、performance_schema数据库中的表,则这个请求不会被缓存。因为某些系统函数两次调用的结果可能不一样,比如函数NOW。
      MySQL的缓存系统会监控涉及的每张表,只要该表的结构或者数据被修改,则与该表有关的所有查询缓存都将变为无效并从查询缓存中删除。比如使用了INSERT、UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE或DROP DATABASE语句。
      虽然查询缓存有时可以提升系统性能,但也因维护缓存而造成了一些开销。从MySQL5.7.20开始不推荐使用查询缓存,在MySQL8.0中直接将其删除。

    语法解析

      因为客户端发送过来的请求只是一段文本,如果查询缓存没有命中,则MySQL服务器程序首先要对这段文本进行分析。判断请求的语法是否正确,然后从文本中将要查询的表、各种查询条件都提取出来放到MySQL服务器内部使用的一些数据结构上。

    查询优化

      语法解析后,服务器程序获得到了需要的信息,MySQL还会对语句做一些优化来提高执行效率,如外连接转化为内连接、表达式简化、自查询转化为连接等等。优化的结果就是生成了一个执行计划,表明了应该使用哪些索引执行查询,以及表之间的连接顺序是怎样等等。我们可以通过EXPLAIN语句来查看某个语句的执行计划。

    存储引擎

      服务器程序完成查询优化后还没有真正地去访问真实的表中数据(查询优化期间可能访问表中少量数据)。MySQL服务器把数据的存储和提取操作都封装到了一个名为存储引擎的模块中。为了实现不同的功能,MySQL提供了各式各样的存储引擎,不同存储引擎管理的表可能有不同的存储结构,采用的存取算法也可能不同。
      MySQL服务器处理客户端请求的过程可简单划分为server层和存储引擎层,各种不同的存储引擎为server层提供统一的调用接口,其中包括了几十个不同用途的底层函数。
    server层和存储引擎层的交互一般以记录为单位。server层在判断某条记录符合要求后,其实是先将其发送到一个缓冲区,待到该缓冲区满了,才向客户端发送真正的记录。该缓冲区的大小由系统变量net_buffer_length控制。
      MySQL支持很多种存储引擎,最常用的是InnoDB和MyISAM。InnoDB从MySQL5.5.5版本开始作为了MySQL的默认存储引擎,之前版本的默认存储引擎为MyISAM。

    --查看当前服务器程序支持的存储引擎
    SHOW ENGINES;
    

    返回结果中的SUPPORT列表示该存储引擎是否可用,DEFAULT值代表当前服务器程序的默认存储引擎;Comment列是对存储引擎的一个描述;Transaction列表示该存储引擎是否支持事务处理;XA列代表该存储引擎是否支持分布式事务;Savepoints列代表该存储引擎是否支持事务的部分回滚。

    设置表的存储引擎

    我们可以为不同的表设置不同的存储引擎,也就是说,不同的表可以有不同的物理存储结构、不同的读取和写入方式。如果在创建表时没有显式指定存储引擎则使用默认存储引擎InnoDB。

    CREATE TABLE engine_demo_table(
    	建表语句;
    )ENGINE = 存储引擎名称;
    

    如果表已经创建好了,可以通过以下语句来修改表的存储引擎

    ALTER TABLE 表名 ENGINE = 存储引擎名称;
    --查看表结构
    SHOW CREATE TABLE 表名;
    
    展开全文
  • 转:MySQL 是怎样运行的:从根儿上理解 MySQL
    展开全文
  • title: MySQL 是怎样运行的(二)——数据库文件系统 date: 2019-3-18 12:34:39 tags: [mysql] categories: 掘金小册 keywords: mysql photos: http://wx1.sinaimg.cn/large/e6f74e75gy1g317zoe826j22bc15o4qp.jpg ...

    title: MySQL 是怎样运行的(二)——数据库文件系统
    date: 2019-3-18 12:34:39
    tags: [mysql]
    categories: 掘金小册
    keywords: mysql
    photos:


    MySQL 是怎样运行的(二)——数据库文件系统

    查看数据目录:SHOW VARIABLES LIKE 'datadir';
    区分mysql安装目录数据目录

    表在文件系统的表示

    1.表结构,存储在 表名.frm 中。
    2.数据,根据引擎不同,方式不同

    InnoDB的表数据存储

    InnoDB其实是使用页为基本单位来管理存储空间的,默认的页大小为16KB。

    对于InnoDB存储引擎来说,每个索引都对应着一棵B+树,该B+树的每个节点都是一个数据页,数据页之间不必要是物理连续的,因为数据页之间有双向链表来维护着这些页的顺序。

    InnoDB的聚簇索引的叶子节点存储了完整的用户记录,也就是所谓的索引即数据,数据即索引。

    InnoDB的表空间(文件空间)

    • 是抽象的概念,对于一个或多个文件,包含若干个页,具有不同类型。
      系统表空间
    • 大小默认12M,会动态扩展,可初始修改大小。
    • 只有一份,Mysql版本5.5.7到5.6.6,数据都默认存储到系统表空间
      独立表空间
    • 5.6.6以后,InnoDB默认会给每个表单独创建独立表空间。文件名表名.ibd
    • 表名.frm存储表结构,表名.ibd存储数据和索引。
    • 可初始设置不使用独立表空间,也可将一个表的空间表示(独立↔系统)
      其他表空间
      通用表空间、undo表空间、临时表空间

    MyISAM的储存表示

    • test.frm 表结构
    • test.MYD 数据文件
    • test.MYI 索引文件

    视图的表示

    视图是虚拟的表,一条查询的结果集。储存视图的时候是不用存数据的,只需要存储其数据结构,会被储存到对于数据库下,视图名.frm文件。

    其他文件

    服务器进程文件:进程id
    服务器日志文件:各种日志
    默认/自动生成的SSL和RSA证书和密钥文件:用于C/S通信

    文件系统对DB的影响

    1.DB名与TABLE名不得超过文件系统允许的最大长度
    2.特殊字符:在上述两名字中,存在除数字和拉丁字母以外的所有字符,都映射成@编码值,如’test?'表会创建,‘test@003f.frm’
    3.数据文件和索引文件的大小都受限于文件系统

    Mysql数据库介绍

    • mysql 核心数据库,存储用户账户和权限和其他重要信息
    • information_schema 描述信息,元数据
    • performance_schema 状态信息,用于监控mysql
    • sys 通过视图结合infor_schema和perfor_schema表,用于展示

    InnoDB的表空间

    抽象概念,可想象成包含若干个数据页的池子

    独立表空间

    区(extent:程度,范围) 与 组

    作用:表空间中页太多,使用便于管理

    • 页大小16kb,连续的64个页就是一个区,默认1MB
    • 每256个区(也是连续吗?)被分为一组,256MB

    区

    页开头

    第一个组开头3个页类型是固定的,比较特殊,分别是:

    1. FSP_HDR:描述表空间的一些属性,每个表空间开头唯一的页
    2. IBUF_BITMAP: 存储本组关于INSERT BUFFER信息
    3. INODE:

    除第一个组外,每个组开头有2个页类型是固定的

    1. XDES:extent descriptior,用于登记本组256个区的属性
    2. IBUF_BITMAP

    区的作用:

    场景:当数据量很大,页有很多的时候,N次插入后。通过双向链表连接的两个逻辑上的页,其物理距离可能相差很远。若使用范围查找,只需找到最左和最右记录,而中间的记录通过双向链表扫描,使用的是随机I/0(很慢),我们希望其物理位置也最好相邻,可使用顺序IO

    区: 物理位置上连续的64个页,在数据量大的时候,分配空间按照区(1MB)分配而不是页(16KB),升至数个区的分配。(好处:减少随机I/0,坏处:空间预分配的浪费,以空间换时间)

    段:存放叶子或非叶子节点 的区(和零散页)的集合
    因为顺序查找,是同一层的双向链表间的查找,我们不希望 叶子节点和非叶子节点混到一起了。所以一个索引有

    • 叶子节点段 (叶子节点 区集合)
    • 非叶子节点段 (非叶子节点 区集合)

    场景:若数据少,岂不是一个索引要一个区,1MB叶子段,1MB非叶子段?这么浪费?所以有了碎片区
    碎片区(fragment)
    一个区中,不是所有页都是为了储存同一个段。而是有的页是段A,有的是段B。

    • 在刚开始向表中插入数据的时候,段是从某个碎片区单个页面为单位来分配存储空间的。
    • 当某个段已经占用了32个碎片区页面之后,此段就会以完整的区为单位来分配空间

    区的分类

    • FREE 空闲的区
    • FREE_FRAG 有剩余空间的碎片区
    • FULL_FRAG 没有剩余空间的碎片区
    • FSEG 附属于某个段的区

    可以理解将碎片区理解为:放置了不同段页面的区?

    XDES页 与链表

    XDES

    • Segment ID :被分配给哪个段,不属于则无
    • List Node:用于表示XDES链表,记录上一或下一个区的XDES指针
    • State:标注了区的类别(四种)
    • Page State Bitmap:用于表示页的使用状态

    插入数据(XDES Entry链表)

    当段中数据较少时,插入过程使用的是表空间链表

    1. 查看是否有FREE_FRAG碎片区,有则插入数据
    2. 否则申请FREE空闲区,并将其状态变为碎片区
    3. 直到将碎片区变为FULL_FRAG

    当段中数据已经占满32个零散的页,再使用表空间链表遍历,效率就低了,

    1. 通过段中的,FREE链表,申请完整的区(空闲区)

    几种用于查找的列表

    每个区的头部 都有XDES Entry,通过它能将同种类别的区连接成链表。便于查找
    隶属于表空间的链表

    1. FREE链表
    2. FREE_FRAG链表
    3. FULL_FRAG链表

    隶属于 段 的链表

    1. FREE链表:同一个段中的 FREE区
    2. NOT_FULL链表:同一个段中,仍然有碎片空间的区组成
    3. FULL链表:同一个段中,没有空闲空间的区组成

    汇总:每个索引有两个段(叶子段,非叶子段),每个段需要三种类型页链表(FREE,NOT_FULL,FULL),另外有三个隶属于表空间的链表。

    基节点:用于存放这些链表的信息(头节点位置,尾节点位置,节点数)

    段的结构

    段虽然是逻辑概念,但是每个段都有一个INODE Entry记录段的信息
    段的结构

    • Segment ID 段号
    • NOT_FULL_N_USED 记录NOT_FULL链表中使用了多少页面,用于定位
    • 三种链表的表头
    • 魔数:用于检测初始化
    • 段中 零散的页,记录其页号
    展开全文
  • 本文是《MySQL是怎样运行的-从根儿上理解MySQL》的学习笔记,文中的图全部来自于这本书,强烈建议买一本看看,对MySQL理解会特别深入,非常感谢作者"小孩子4919"。 第十八章 事务 事务的四大特性 原子性 事务中的...
  • 本文是《MySQL是怎样运行的-从根儿上理解MySQL》的学习笔记,文中的图全部来自于这本书,强烈建议买一本看看,对MySQL理解会特别深入,非常感谢作者"小孩子4919"。 第七章 B+树索引的使用 索引的代价及更好地使用...
  • 本文是《MySQL是怎样运行的-从根儿上理解MySQL》的学习笔记,文中的图全部来自于这本书,强烈建议买一本看看,对MySQL理解会特别深入,非常感谢作者"小孩子4919"。 第十一章 连接 连接简介 连接的本质 为了叙述方便...
  • 带你重新认识下Mysql
  • mysql原理
  • 以下内容来自掘金小册MySQL 是怎样运行的:从根儿上理解 MySQL 版权归原作者所有! InnoDB数据页结构 InnoDB为了不同的目的而设计了不同类型的页,我们把用于存放记录的页叫做数据页。 一个数据页可以被...
  • MySQL是怎样运行的:从根儿上理解MySQL 1. 服务端和客户端 使用数据库也是用客户端去和服务端通信,在安装时,mysqld命令就是服务器端的执行命令,mysql就是客户端的执行命令。 其实过程就是: 启动服务端和客户端...
  • 文章目录0....MySQL是怎样运行的:从根儿上理解MySQL 0. 前言:从二叉树到B+树的查找 在数据结构【大话数据结构】里,二叉树是一种基本数据结构,相关的基本概念这里就不多说了,我就从应用需求的角度...
  • 文章目录1. 单表访问方法1.1 const1.2 ref1.3 ref_or_null1.4 range1.5 index1.6 all2.连接原理2.1 嵌套循环连接(Nested-...MySQL是怎样运行的:从根儿上理解MySQL 访问方法是什么概念呢?就是方法嘛(废话)。 my...
  • MySQL 是怎样运行的:从根儿上理解 MySQL [HTML+MD] 『课程介绍』: 你会学到什么? MySQL 的一些基本概念; 如何处理使用 MySQL 过程中的乱码问题; 从根儿上理解 InnoDB 存储引擎是如何存储记录、数据页,以及由页...
  • Mysql是怎样运行的》读书笔记二

    千次阅读 2020-12-06 20:33:23
    在配置文件中,不同的选项组给不同的程序使用的,若选项组名称与程序名称相同,则组中的选项专门应用于该程序。例如: [mysqld]组用于mysql服务器; [mysql]组用于客户端程序; 下面两个比较特殊: [server]组下面...
  • 在下载MySql源码并安装之后, 一、启动MySql服务器程序 1在unix系统中, 1 mysqld和mysqls_safe,mysqld.server,mysqld_multi, mysqls_safe会间接的调用mysqld,mysqld.server会间接调用mysqls_safe。 2,在wiindow...
  • MySQL中,,一个查询的执行成本由I/O成本和CPU成本组成的,对于InnoDB存储引擎来说,读取一个页面的I/O成本默认1.0,读取以及检测一条记录是否符合搜素条件的成本默认0.2。 在单表查询中,优化器生成执行...
  • 前面主要一些安装使用MySQL的过程,没必要记笔记 客户端与服务器连接过程,MySQL支持一下三种客户端进程与服务端进程通讯方式: TCP/IP 命名管道和共享内存(Windows操作系统中的两种进程间通信方式) Unix域套接...
  • Mysql是怎样运行的》读书笔记四

    千次阅读 热门讨论 2020-12-20 18:04:42
    InnoDB一个将表中数据存储到磁盘上的存储引擎,即使我们关闭并重启服务器,数据依然存在。InnoDB存储引擎并不是一条一条的把记录从磁盘上读出,而是将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位。...
  • MySQL的调控按钮 —— 启动选项和系统变量 乱码的前世今生 —— 字符集和比较规则 从一条记录说起—— InnoDB 记录结构 盛放记录的大盒子 —— InnoDB 数据页结构 快速查询的秘籍 —— B+ 树索引 好东西也得先...
  • Mysql是怎样运行的》读书笔记三

    千次阅读 2020-12-13 20:25:02
    MySQL有4个字符集和比较规则,分别服务器级别、数据库级别、表级别、列级别。 服务器级别 (1)查看服务器级别的字符集 mysql> show variables like 'character_set_server'; (2)查看服务器级别的比较规则 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 502
精华内容 200
关键字:

mysql是怎样运行的

mysql 订阅