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

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

原文地址:https://www.cnblogs.com/jing-yi/p/12845773.html