MySQL高级学习笔记

Posted xinxin19881112

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高级学习笔记相关的知识,希望对你有一定的参考价值。

目录

1、MySQL数据库逻辑架构。

 (1)网络连接层。

(2)服务层(MySQL Server)。

 1)连接池(Connection Pool)。

 2)系统管理和控制工具(Management Services & Utilities)。

 3)SQL接口(SQL Interface)。

 4)解析器(Parser)。

 5)查询优化器(Optimizer)。

 6)缓存和缓冲池(Cache&Buffer)。

(3)存储引擎层(Pluggable Storage Engines)。

(4)系统文件层(File System)。

 1)日志文件。

     [1]、错误日志(Error log)。

     [2]、通用查询日志(General query log)。

     [3]、二进制日志(binary log)。

     [4]、慢查询日志(Slow query log)

 2)配置文件。

 3)数据文件。

     [1]、MYD格式文件。

     [2]、MYI格式文件。

     [3]、ibd文件、IBDATA文件。

     [4]、ibdata1文件。

     [5]、ib_logfile0文件、ib_logfile1文件。

     [6]、frm格式文件。

     [7]、db.opt文件。

4)pid文件。

5)socket文件。

2、存储引擎介绍。

(1)查看存储引擎。

(2)MyISAM与InnoDB的对比。

(3)几种存储引擎的对比。

(4)MySQL各种存储引擎介绍。

  1)InnoDB存储引擎。

  2)MyISAM存储引擎。

  3)Archive存档、归档存储引擎。

  4)Blackhole黑洞存储引擎。

  5)CSV文件格式存储引擎。

  6)Memory内存存储引擎。

  7)Federated存储引擎。

  8)Mrg_MyISAM存储引擎,合并MyISAM表存储引擎。

  9)NDB集群引擎。

3、SQL性能下降原因。

4、SQL语句执行顺序。

5、7种join连接查询。

(1)7种join连接查询。

(2)7种join连接查询示例。 

6、索引。

(1)索引。

(2)索引优势、劣势。

(3)索引分类。

   1)单值索引。

   2)唯一索引。

   3)复合索引。

   4)基本语法。 

(4)索引结构、检索原理。

1)BTree索引。

2)Hash索引

3)full-text全文索引

4)R-Tree索引

(5)适合创建索引的场景。

(6)不适合创建索引的场景。

7、explain。

(1)explain查看执行计划。

(2)explain的作用。

(3)explain分析的各字段解释。

1)id。

2)select_type。

3)table。

4)type。

5)possible_keys。

6)key。

7)key_len。

8)ref。

9)rows。

10)Extra。

8、索引案例,数据库表优化。

(1)索引案例,单表优化。

(2)索引案例,两张表优化。

(3)索引案例,三张表优化。

9、索引优化。

(1)全值匹配我最爱。

(2)最佳左前缀法则。

(3)索引列上少计算。

(4)范围之后全失效。

(5)覆盖索引不写*。

(6)不等空值还有or,索引失效要少用。

   1)在使用不等于“!=”、“<>”的时候,无法使用索引会导致全表扫描。

   2)is null、is not null无法使用索引。

   3)少用or,使用or连接会导致索引失效。

(7)like百分写最右。

(8)varchar单引号不可丢。

(9)总结。

(10)索引优化记忆口诀。

10、小表驱动大表。

(1)优化流程。

(2)小表驱动大表。

1)当b表的数据量小于a表的数据量时,用in优于exists。 

2)当a表的数据量小于b表的数据量时,用exists优于in。 

3)exists。

11、使用order by排序时用上索引,order by排序关键字优化。

(1)order by子句尽量使用Using index方式排序,避免使用Using filesort方式排序。

(2)filesort的两种算法:双路排序、单路排序。

(3)优化策略。

1)使用order by时,不写select *,写查询需要的具体字段。

2)提高sort_buffer_size大小。

3)提高max_length_for_sort_data的大小。

(4)为排序使用索引。

12、group by关键字优化。

13、慢查询日志。

(1)mysql的慢查询日志。

(2)查看是否开启慢查询。

(3)开启慢查询日志。

(4)慢查询配置的时间。

(5)mysqldumpslow日志分析工具。

14、批量插入数据脚本。

15、用Show Profile进行sql分析。

(1)Show Profile介绍。

(2)sql分析。

(3)日常开发需要注意的结论。

16、全局查询日志。

17、数据库锁。

(1)锁的分类。

18、数据库表锁。

(1)表加read锁。

(2)表加write锁。

(3)表读锁和写锁对比。

(4)分析表锁定。

19、数据库行锁。

(1)行锁特点。

(2)行锁支持事务。

(3)并发事务处理带来的问题。

1)更新丢失lost update。

2)脏读dirty reads。

3)不可重复读non-repeatable reads。

4)幻读phantom reads。

(4)事务的隔离级别。

(5)行锁演示。

(6)索引失效行锁变表锁。

(7)间隙锁危害。

(8)使用for update锁定某一行记录。

(9)行锁总结。

1)行锁总结。

2)行锁分析。

3)行锁优化。

20、页锁。

21、mysql主从复制。

(1)复制的基本原理。

(2)mysql复制过程的三个步骤。

(3)复制的基本原则。

(4)配置mysql一主一从复制。

(5)配置mysql主从复制常见问题。

(6)my.ini和my.cnf配置文件。

22、使用的数据库相关脚本。 


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高级学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

《MySQL必知必会学习笔记》:高级联结

MySQL高级学习笔记

SQL笔记--MySQL高级操作

MySQL学习笔记_10_MySQL高级操作(下)

Mysql DBA高级运维学习笔记-mysql数据库介绍

mysql 高级学习笔记

(c)2006-2024 SYSTEM All Rights Reserved IT常识