MySQL高级学习笔记
Posted xinxin19881112
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高级学习笔记相关的知识,希望对你有一定的参考价值。
目录
2)系统管理和控制工具(Management Services & Utilities)。
(3)存储引擎层(Pluggable Storage Engines)。
[2]、通用查询日志(General query log)。
[5]、ib_logfile0文件、ib_logfile1文件。
8)Mrg_MyISAM存储引擎,合并MyISAM表存储引擎。
1)在使用不等于“!=”、“<>”的时候,无法使用索引会导致全表扫描。
1)当b表的数据量小于a表的数据量时,用in优于exists。
2)当a表的数据量小于b表的数据量时,用exists优于in。
11、使用order by排序时用上索引,order by排序关键字优化。
(1)order by子句尽量使用Using index方式排序,避免使用Using filesort方式排序。
1)使用order by时,不写select *,写查询需要的具体字段。
3)提高max_length_for_sort_data的大小。
1、mysql数据库逻辑架构。
MySQL数据库逻辑架构图
(1)网络连接层。
客户端连接器(Client Connectors)。
提供与MySQL服务器建立连接的支持。最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端实现的类似tcp/ip的通信。
目前几乎支持所有主流的服务端编程技术,例如常见的 Java、.NET、php、Python、C等,它们通过各自API技术与MySQL建立连接。
同样在该层上可以实现基于SSL的安全连接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
(2)服务层(MySQL Server)。
服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存和缓冲池。
1)连接池(Connection Pool)。
负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。
提供一些类似于连接处理、授权认证、及相关的安全方案,为通过认证安全接入的客户端提供线程。
2)系统管理和控制工具(Management Services & Utilities)。
例如:备份恢复、安全管理、集群管理等
3)SQL接口(SQL Interface)。
用于接受客户端发送的各种SQL命令,并且返回用户需要查询的结果。
例如:DML、DDL、存储过程、视图、触发器等。
4)解析器(Parser)。
解析器将请求的SQL解析生成一个“解析树”,然后根据MySQL的语法规则检查解析树是否合法。
5)查询优化器(Optimizer)。
当“解析树”通过解析器语法检查后,将交给优化器将其转化成执行计划,然后与存储引擎交互。
6)缓存和缓冲池(Cache&Buffer)。
缓存机制是由一系列小缓存组成的。例如:表缓存,记录缓存,权限缓存,引擎缓存等。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
第二层架构主要完成大多数的核心服务功能,例如SQL接口,并且完成缓存的查询,SQL的分析和优化及部分内置函数的执行。
所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并且创建相应的内部解析树,并且对其完成相应的优化。
例如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。
如果缓存空间足够大,这样在解决大量读操作的环境环境中能够很好的提升系统的性能。
(3)存储引擎层(Pluggable Storage Engines)。
存储引擎负责MySQL中数据的存储和提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,服务器中的查询执行引擎通过API接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异,不同的存储引擎具有的功能不同,可以根据需要进行选取。最常见的存储引擎是InnoDB和MyISAM。
(4)系统文件层(File System)。
系统文件层负责将数据、日志存储在文件系统上,并且完成与存储引擎的交互,是文件的物理存储层。
主要包含日志文件、数据文件、配置文件、pid 文件、socket 文件等。
1)日志文件。
[1]、错误日志(Error log)。
log-error错误日志记录严重的警告信息、错误信息、启动与关闭详细信息。
#查看错误日志存放路径等。
show variables like '%log_error%'
[2]、通用查询日志(General query log)。
log查询日志记录一般的SQL查询语句。可以与慢查询日志结合使用,分析查询慢的SQL语句。
#查看是否开启记录日志,通用查询日志存放路径。
show variables like '%general%';
[3]、二进制日志(binary log)。
记录对MySQL数据库执行更改操作的SQL语句,并且记录了SQL语句的发生时间、执行时长。
不记录select、show等不修改数据库记录的SQL语句。
log-bin二进制日志主要用于数据库恢复和主从复制。
#查看是否开启记录日志,binlog日志存放路径等。
show variables like '%log_bin%';
#查看binlog配置参数。
show variables like '%binlog%';
#查看有哪些binlog日志文件。
show binary logs;
[4]、慢查询日志(Slow query log)
记录所有执行时间超时的查询SQL语句。
#查看是否开启,慢查询日志存放路径。
show variables like '%slow_query%';
# 查看配置的SQL语句执行超时的时间。默认设置是10秒。
show variables like '%long_query_time%';
2)配置文件。
用于存放MySQL所有的配置信息文件,比如my.cnf、my.ini等。
window系统是my.ini配置文件,Linux系统是my.cnf配置文件。
3)数据文件。
[1]、MYD格式文件。
MyISAM存储引擎专用,存放表数据。存放MyISAM表的data数据,每一张表都会有一个.MYD文件。
[2]、MYI格式文件。
MyISAM存储引擎专用,存放表索引。存放MyISAM表的索引相关信息,每一张 MyISAM表对应一个.MYI文件。
[3]、ibd文件、IBDATA文件。
存放InnoDB 的数据文件,包括索引。
InnoDB 存储引擎有两种表空间方式:独享表空间和共享表空间。
独享表空间使用.ibd文件来存放数据,且每一张InnoDB表对应一个.ibd文件。
共享表空间使用.ibdata文件,所有表共同使用一个或多个.ibdata文件。
[4]、ibdata1文件。
系统表空间数据文件,存储表元数据、Undo日志等。
[5]、ib_logfile0文件、ib_logfile1文件。
Redo log日志文件。
[6]、frm格式文件。
存放表的结构。存储与表相关的meta元数据信息,包括表结构的定义信息等,每一张表都会有一个frm文件。
mysql5.x有frm格式文件,mysql8.x没有frm格式文件。
MySQL8.0删除了原来的frm文件,MySQL8.0重新设计数据词典后,引入了SDI(Serialized Dictionary Information),统一使用InnoDB存储引擎来存储表的元数据信息。SDI信息源记录保存在ibd文件中,可以使用ibd2sdi工具查看表结构信息。
[7]、db.opt文件。
记录这个库的默认使用的字符集、校验规则。
mysql5.x有db.opt文件,mysql8.x没有db.opt文件。
4)pid文件。
存放mysql的进程id。pid文件是mysqld应用程序在Linux环境下的一个进程文件。
5)socket文件。
socket文件是在Linux环境下的文件。在Linux环境下,用户客户端可以使用Unix Socket连接MySQL,不使用TCP/IP网络连接。
2、存储引擎介绍。
(1)查看存储引擎。
-- 查看mysql版本号。
SELECT VERSION();
-- 查看mysql支持的存储引擎。
show engines;
-- 查看当前默认的存储引擎。
show variables like '%storage_engine%';
(2)MyISAM与InnoDB的对比。
对比项 | MyISAM | InnoDB |
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,操作一条记录会锁住整个表,不适合高并发操作。 | 行锁,操作一条记录锁住某一行,不对其它行有影响。 适合高并发的操作。 |
缓存 | 只缓存索引,不缓存真实数据。 | 缓存索引和真实数据。 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
(3)几种存储引擎的对比。
特点 | InnoDB | MyISAM | Memory | MERGE | NDB | Archive |
存储限制 | 64TB | 有 | 有 | 没有 | 有 | 没有 |
事务安全 | 支持 | 支持 | ||||
锁机制 | 行锁(适合高并发) | 表锁 | 表锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 | |
哈希索引 | 支持 | 支持 | ||||
全文索引 | 5.6版本之后支持 | 支持 | ||||
集群索引 | 支持 | |||||
数据索引 | 支持 | 支持 | 支持 | |||
索引缓存 | 支持 | 支持 | 支持 | 支持 | 支持 | |
数据可压缩 | 支持 | 支持 | ||||
磁盘空间使用 | 高 | 低 | N/A | 低 | 低 | < 以上是关于MySQL高级学习笔记的主要内容,如果未能解决你的问题,请参考以下文章 |