当前位置: 首页 > news >正文

mysql数据库学习之高级进阶(七)

文章目录

  • 一、存储引擎
    • 1.1 MySQL体系结构
    • 1.2 存储引擎
    • 1.3 InnoDB
    • 1.4 MyISAM
    • 1.5 Memory
    • 1.6 性能分析
    • 1.7 慢查询日志
    • 1.8 profile
    • 1.9 explain
  • 二、索引
    • 2.1 简介
    • 2.2 索引优缺点:
    • 2.3 索引结构
      • 2.3.1 B-Tree
      • 2.3.2 B+Tree
      • 2.3.3 Hash
      • 2.3.4 Full-text 索引
    • 2.4 索引分类
      • 2.5 思考题
      • 2.6 创建索引语法
      • 2.7 使用规则
      • 2.8 SQL 提示
      • 2.9 覆盖索引&回表查询
      • 2.10 前缀索引
      • 2.11 单列索引&联合索引
      • 2.12 设计原则

一、存储引擎

1.1 MySQL体系结构

在这里插入图片描述
在这里插入图片描述

层级 核心组件 职责 特点
连接层 连接池、认证 管理客户端连接、权限验证 网络通信基础
服务层 SQL接口、解析器、优化器 SQL处理、优化、内置函数 跨存储引擎,MySQL大脑
引擎层 InnoDB、MyISAM等 数据存储、索引、事务 可插拔,MySQL精髓
存储层 数据文件、日志文件 数据持久化 最终落盘位置

1.2 存储引擎

  • 简介

    • 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。

    • 存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎,默认存储引擎是InnoDB。

  • 相关操作

    -- 查询建表命令
    show create table account;-- 建表时指定存储引擎
    CREATE TABLE 表名(...
    ) ENGINE=INNODB;-- 查看当前数据库支持的存储引擎
    mysql> show engines;
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
    | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
    | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
    | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
    | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
    | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
    | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
    | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
    | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    9 rows in set (0.00 sec)
    

1.3 InnoDB

  • 简介:InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 引擎

  • 特点

    • DML 操作遵循 ACID(事务的4大特性) 模型,支持事务

    • 行级锁,提高并发访问性能

    • 支持外键约束,保证数据的完整性和正确性

  • 文件

    • xxx.ibd: xxx代表表名,InnoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。

    • 可以通过指令查看SHOW VARIABLES LIKE 'datadir';

      mysql> SHOW VARIABLES LIKE 'datadir';
      +---------------+---------------------------------------------+
      | Variable_name | Value                                       |
      +---------------+---------------------------------------------+
      | datadir       | C:\ProgramData\MySQL\MySQL Server 5.7\Data\ |
      +---------------+---------------------------------------------+
      1 row in set, 1 warning (0.00 sec)
      
    • 从idb文件提取表结构数据:ibd2sdi xxx.ibd

      ibd2sdi xxx.ibd
      
  • 参数

    • innodb_file_per_table :是一个会话/全局变量,它控制 InnoDB 存储引擎如何为新创建的表分配表空间。

      • 当设置为 ON (开启):每个 InnoDB 表会被存储在自己独立的 .ibd 表空间文件 中。
      • 当设置为 OFF (关闭):所有 InnoDB 表的数据和索引都存储在共享的系统表空间文件(通常是 ibdata1 中。
    • **查看innodb_file_per_table变量是否打开:**show variables like ‘innodb_file_per_table’;

      mysql> show variables like 'innodb_file_per_table';
      +-----------------------+-------+
      | Variable_name         | Value |
      +-----------------------+-------+
      | innodb_file_per_table | ON    |
      +-----------------------+-------+
      1 row in set, 1 warning (0.00 sec)
      
    • 手动修改innodb_file_per_table变量的值

      -- 动态修改(立即生效,但对新建表有效)
      SET GLOBAL innodb_file_per_table = ON;-- 永久修改(需重启 MySQL):在 MySQL 配置文件(my.cnf 或 my.ini)中的 [mysqld] 部分添加或修改
      [mysqld]
      innodb_file_per_table = ON
      
  • InnoDB 逻辑存储结构
    在这里插入图片描述

1.4 MyISAM

  • 简介:MyISAM 是 MySQL 早期的默认存储引擎。

  • 特点

    • 不支持事务,不支持外键

    • 支持表锁,不支持行锁

    • 访问速度快

  • 文件:

    • xxx.sdi: 存储表结构信息

    • xxx.MYD: 存储数据

    • xxx.MYI: 存储索引

1.5 Memory

  • 简介:Memory 引擎的表数据是存储在内存中的,受硬件问题、断电问题的影响,只能将这些表作为临时表或缓存使用。

  • 特点

    • 存放在内存中,速度快

    • hash索引(默认)

  • 文件:

    • xxx.sdi: 存储表结构信息
  • 三大存储引擎的区别

    特点 InnoDB MyISAM Memory
    存储限制 64TB
    事务安全 支持 - -
    锁机制 行锁 表锁 表锁
    B+tree索引 支持 支持 支持
    Hash索引 - - 支持
    全文索引 支持(5.6版本之后) 支持 -
    空间使用 N/A
    内存使用 中等
    批量插入速度
    支持外键 支持 - -
    选择 如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,则 InnoDB 是比较合适的选择 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那这个存储引擎是非常合适的 将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。Memory 的缺陷是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性
  • 电商中的足迹和评论适合使用 MyISAM 引擎,缓存适合使用 Memory 引擎。

1.6 性能分析

  • 查看增删改查执行频次(INSERT, UPDATE, DELETE, SELECT)

    • SHOW GLOBAL STATUS LIKE Com_______;
    • SHOW SESSION STATUS LIKE Com_______;
  • 示例

    mysql> show global status like 'Com_______';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Com_binlog    | 0     |
    | Com_commit    | 1     |
    | Com_delete    | 0     |
    | Com_insert    | 9     |
    | Com_repair    | 0     |
    | Com_revoke    | 1     |
    | Com_select    | 150   |
    | Com_signal    | 0     |
    | Com_update    | 28    |
    | Com_xa_end    | 0     |
    +---------------+-------+
    10 rows in set (0.00 sec)
    

1.7 慢查询日志

  • 简介:慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。

  • **开启/关闭:**MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:(更改后记得重启MySQL服务,日志文件位置:/var/lib/mysql/localhost-slow.log)

    # 开启慢查询日志开关
    slow_query_log=1<
http://www.dtcms.com/a/457804.html

相关文章:

  • 做网站的书知乎建地方的网站前景
  • 数字化转型:概念性名词浅谈(第六十七讲)
  • Arduino开发ESP32连接手机热点【适合新手】
  • 网站搭建策划书网站备案流程审核单
  • 网站源码交易平台郑州阿里巴巴网站建设
  • 教育培训手机网站模板下载电脑端网站和手机网站区别
  • 集成热部署
  • 【代码随想录算法训练营——Day28】贪心算法——56.合并区间、738.单调递增的数字、968.监控二叉树
  • 河北建设执业资格注册中心网站响应式网站 软件
  • tuchuang_共享文件_图片_取消_删除
  • 基因组组装:1. Hifiasm 组装参考基因组
  • 网站制作设计专业公司网络营销个人总结
  • 力扣2779. 数组的最大美丽值
  • 深圳做分销网站北京搭建工厂
  • 甘肃省建设厅执业资格注册中心网站通知网站开发三个月能学会吗
  • 石家庄手机网站建设装饰装修网站大全
  • 鼎锋优配股票杠杆交易市场赣锋锂业涨超6%,创两年多新高
  • 网络服务投诉平台商丘seo快速排名
  • 自适应网站欣赏wordpress主题超限
  • TODO 分类任务指标计算和展示 准确率 F1 Recall
  • 网站分辨率做96是否会更好织梦做双语网站
  • 贪心:火烧赤壁
  • 公司网站建设的环境分析城乡建设厅官方网站办事大厅
  • 深度学习基础:从原理到实践——附录A:PyTorch 深度学习框架基础(下)
  • 网站 二级分类品牌创意网站建设徕卡e
  • 做网站设计师庐江网站制作
  • 夫妻分房睡,真的会感情淡吗?分房不是问题,分心才是
  • postgresql_2025Q2单季度财报数据
  • wap网站 html5东莞网站的建设
  • phpmysql网站开发案例企业网址是什么?