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,提升查询效率

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

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/jing-yi/p/12845773.html
Copyright © 2011-2022 走看看