MySQL学习笔记(一)——MySQL的一些基本知识

2021/7/2 19:51:22

本文主要是介绍MySQL学习笔记(一)——MySQL的一些基本知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原文链接

https://juejin.cn/book/6844733769996304392
版权归作者所有,如有侵权请联系我删除!!

MySQL服务器处理客户端请求过程

MySQL服务器处理流程

连接管理

  • 服务器是一个线程处理一个客户端连接

  • 客户端退出时会与服务器断开连接,服务器不会立即销毁该线程,
    而是把它缓存起来,在另起新连接时,把这个缓存的线程分配给该新客户端。
    减少了线程的创建和销毁,节省开销。
    如果线程分配的太多了会严重影响系统性能,所以也需要限制可以同时连接到服务器的客户端数量。

  • 客户端发起连接的时候,需要携带主机信息、用户名、密码,服务器会进行认证。
    如果客户端和服务器不运行在一台计算机上,可采用使用了SSL的网络连接进行通信,来保证数据传输的安全性。

  • 当连接建立后,与该客户端关联的服务器线程会一直等待客户端发送过来的请求,MySQL服务器接收到的请求只是一个文本消息,该文本消息还要经过各种处理。

解析与优化

  • 主要是查询缓存、语法解析和查询优化

查询缓存

  • 语句必须在字符层面上完全一样(空格、大小写、注释)
  • 不同客户端共享同一个缓存
  • 查询中使用系统函数请求不会被缓存
  • 表结构和数据被修改过,缓存中涉及这张表的查询会被删除
  • 查询有时可以提升性能,但也造成了一些开销;从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
    • 查询缓存的另一个大问题是它受到单个互斥锁的保护。在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用;同时还不能保证缓存命中率,所以无法估计性能。
    • 查询越复杂,扫描范围越大,则查询缓存越受益。
    • 现在可以利用查询重写插件,在不更改应用程序的同时,插入优化器提示语句。另外,还有像ProxySQL这样的第三方工具,它们可以充当中间缓存。

语法解析

  • 将文本转换为引擎内部的一些数据结构

查询优化

  • 自动优化自己写的语句,生成了一个执行计划,可以提高执行效率
  • 使用Explain 语句可以查看执行计划

存储引擎

  • 常用的 InnoDB 和 MyISAM
  • 系统变量有GLOBAL和SESSION两种

字符集和比较规则

一些字符集

  • ASCII
    • 一共128字符,一个字节编码
  • ISO 8859-1
    • 256字符,一个字节编码,多了128西欧字母
  • GBK字符集
    • GB2312字符集收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个。同时这种字符集又兼容ASCII字符集,所以在编码方式上显得有些奇怪:
      • 如果该字符在ASCII字符集中,则采用1字节编码。
      • 否则采用2字节编码。
    • GBK字符集只是在收录字符范围上对GB2312字符集作了扩充,编码方式上兼容GB2312。
  • utf-8字符集
    • 收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容ASCII字符集,采用变长编码方式,编码一个字符需要使用1~4个字节。
    • utf8使用1~4个字节编码一个字符,utf16使用2个或4个字节编码一个字符,utf32使用4个字节编码一个字符。

MySQL相关

  • utf8mb3:阉割过的utf8字符集,只使用1~3个字节表示字符,在MySQL中utf-8默认是指utf8mb3。

  • utf8mb4:正宗的utf8字符集,使用1~4个字节表示字符。

  • utf8_general_ci是MySQL中utf8的默认比较规则

  • 将服务端各系统变量的字符集设置成和客户端一样的语句:

    • SET NAMES 字符集名;
  • 比较规则可能影响排序操作的结果



这篇关于MySQL学习笔记(一)——MySQL的一些基本知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程