本文主要是介绍MySQL学习笔记(一)——MySQL的一些基本知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原文链接
https://juejin.cn/book/6844733769996304392
版权归作者所有,如有侵权请联系我删除!!
MySQL服务器处理客户端请求过程
连接管理
-
服务器是一个线程处理一个客户端连接
-
客户端退出时会与服务器断开连接,服务器不会立即销毁该线程,
而是把它缓存起来,在另起新连接时,把这个缓存的线程分配给该新客户端。
减少了线程的创建和销毁,节省开销。
如果线程分配的太多了会严重影响系统性能,所以也需要限制可以同时连接到服务器的客户端数量。
-
客户端发起连接的时候,需要携带主机信息、用户名、密码,服务器会进行认证。
如果客户端和服务器不运行在一台计算机上,可采用使用了SSL的网络连接进行通信,来保证数据传输的安全性。
-
当连接建立后,与该客户端关联的服务器线程会一直等待客户端发送过来的请求,MySQL服务器接收到的请求只是一个文本消息,该文本消息还要经过各种处理。
解析与优化
查询缓存
- 语句必须在字符层面上完全一样(空格、大小写、注释)
- 不同客户端共享同一个缓存
- 查询中使用系统函数请求不会被缓存
- 表结构和数据被修改过,缓存中涉及这张表的查询会被删除
- 查询有时可以提升性能,但也造成了一些开销;从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
- 查询缓存的另一个大问题是它受到单个互斥锁的保护。在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用;同时还不能保证缓存命中率,所以无法估计性能。
- 查询越复杂,扫描范围越大,则查询缓存越受益。
- 现在可以利用查询重写插件,在不更改应用程序的同时,插入优化器提示语句。另外,还有像ProxySQL这样的第三方工具,它们可以充当中间缓存。
语法解析
查询优化
- 自动优化自己写的语句,生成了一个执行计划,可以提高执行效率
- 使用Explain 语句可以查看执行计划
存储引擎
- 常用的 InnoDB 和 MyISAM
- 系统变量有GLOBAL和SESSION两种
字符集和比较规则
一些字符集
- ASCII
- ISO 8859-1
- 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的默认比较规则
-
将服务端各系统变量的字符集设置成和客户端一样的语句:
-
比较规则可能影响排序操作的结果
这篇关于MySQL学习笔记(一)——MySQL的一些基本知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!