zoukankan      html  css  js  c++  java
  • MySQL基础

    1、MySQL通信

    (1)同步和异步

      *  同步:同步通信依赖于被调用方,受限于被调用方的性能。应用操作数据库,线程会阻塞,等待数据库的返回。

      *  异步:异步可以避免应用阻塞,但是一个连接就会创建一个线程,线程间切换会占用大量CPU资源。而且异步通信会带来编码的复杂度,一般不建议使用,如果要使用异步,必须使用连接池。

    (2)长连接和短连接

      *  短连接:操作完毕后,马上close掉。

      *  长连接:保持连接状态,减少服务端创建和释放连接的消耗。但是保持长连接会消耗内存,长时间不活跃的连接,MySQL服务器会自动断开。

    MySQL一般采用同步、长连接(默认超时时间28800秒,8小时)

    (3)通信方式

                  

      *  单工:数据的传输是单向的。

      *  半双工:数据传输是双向的,但同一时间只能有一台服务器在发送数据。

      *  全双工:数据传输是双向的,并且可以同时传输。

    MySQL采用半双工通信方式。所以客户端发送SQL语句给MySQL服务器时,数据不能分成小块发送,无论SQL语句有多大,都是一次性发送

    注意:——避免SQL太大,如批量插入数据、in里面的值太多等。

          ——避免不带limit的查询。

      可以通过修改max_allowed_packet参数来修改一次性传输的数据量大小(默认4M)

    (4)通信协议

      *  Unix Socket

        如果在Linux服务器上,没有使用-h参数,就会使用socket方式登录。

      *  TCP/IP

        如果使用-h参数,就会使用TCP/IP协议。如:mysql -h192.168.25.100 -uroot -p3306。常见变成语言的连接模块都是用TCP协议连接MySQL服务器,如mysql-connector-java-xxx.jar。

    2、查询缓存

      MySQL自带的缓存默认是关闭的,不推荐使用。因为其应用场景有限:

        第一:要求SQL语句必须一模一样,中间多个空格或字母大小写都不行。

        第二:表里面任何一条数据发生变化,这张表所有缓存都会失效。

      在MySQL 8.0中,查询缓存已经被移除。

    3、SQL语句解析:解析器和预处理(Parser  &  Preprocessor)

      通过词法和语法分析以及语义的解析,校验SQL语句的正确性。

    (1)词法分析

      将一个完整的SQL语句打碎成一个个的单词,校验是否合法。

    (2)语法分析

      对SQL做一些语法检查,如单引号有没有闭合等,然后根据MySQL定义的语法规则,针对SQL生成一个数据结构——解析树。

        

    (3)预处理器

      会检查生成的解析树,解决解析器无法解析的语义,如:表和字段是否存在等。预处理之后得到一个新的解析树。

    4、查询优化(Query Optimizer)与查询执行计划

      查询优化器的目的就是根据解析树生成不同的执行计划,然后选择一种最优的执行计划。MySQL使用基于开销(cost)的优化器,哪种执行计划开销最小就使用哪种。

    5、存储引擎

      在一个数据库中,每个表都可以使用单独的存储引擎。

    (1)MyISAM

      特点:——支持表级别的锁(插入和更新会锁表)

            ——不支持事务

         ——拥有较高的插入和查询速度

         ——存储了表的行数(count更快)

      场景:只读之类的数据分析项目。

    (2)InnoDB

      特点:——支持事务,支持外键,因此数据完整性和一致性更高

         ——支持行级别锁和表级别锁

            ——支持读写并发,写不阻塞读(MVCC)

            ——特殊的索引存储方式,减少IO,提升查询效率

      场景:经常更新的表,存在并发读写

  • 相关阅读:
    [置顶] Windows Phone后台音乐详解一
    Android应用开发学习笔记之BroadcastReceiver
    二维码闪电登录流程详解,附demo(1/2)
    C#利用Lambda和Expression实现数据的动态绑定
    从M个数中随机选出N个数的所有组合,有序,(二)
    3DShader之立方体环境映射(cubic environment mapping)
    二维码闪电登录流程详解,附demo(2/2)
    oracle 分区表exchange原理
    禁止页面复制功能 js禁止复制 禁用页面右键菜单
    sleep与信号唤醒的问题 & 内核对信号的处理方式
  • 原文地址:https://www.cnblogs.com/jing-yi/p/12845773.html
Copyright © 2011-2022 走看看