首页 > 数据库 >MySQL(六)存储引擎

MySQL(六)存储引擎

时间:2023-03-17 14:34:49浏览次数:39  
标签:存储 NO mysql 引擎 InnoDB MySQL NULL

存储引擎

连接管理查询缓存解析器执行器被归为MySQL service,而把真实存储数据的功能划分为存储引擎的功能。所以MySQL service经过查询优化后,只需按照生成的执行计划调用存储引擎的API获取数据,然后返回给客户端即可。存储引擎本质就是表的类型,功能是接收上层传来的指令,然后对表中的数据进行提取或者写入操作。

1 查看存储引擎

show engines查看支持的存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster         | NO      | Clustered, fault-tolerant tables                               | NULL         | NULL | NULL       |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| ndbinfo            | NO      | MySQL Cluster system information storage engine                | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)

查看默认表存储引擎
mysql> show variables like '%default_storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

mysql> select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+
1 row in set (0.00 sec)

2 修改存储引擎

SET DEFAULT_STORAGE_ENGINE
mysql> SET DEFAULT_STORAGE_ENGINE = MYISAM
    -> ;
Query OK, 0 rows affected (0.01 sec)
mysql> create table emp1(id int);
Query OK, 0 rows affected (0.00 sec)

mysql> show create table emp1;
+-------+------------------------------------------------------------------------------------------+
| Table | Create Table                                                                             |
+-------+------------------------------------------------------------------------------------------+
| emp1  | CREATE TABLE `emp1` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

​ 数据库存储结构为:

[root@hadoop101 mysql]# cd dbtest1/
[root@hadoop101 dbtest1]# ls
db.opt  emp1.frm  emp1.MYD  emp1.MYI
alter 修改表的存储引擎
mysql> alter table emp2 engine=myisam;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table emp2;
+-------+------------------------------------------------------------------------------------------+
| Table | Create Table                                                                             |
+-------+------------------------------------------------------------------------------------------+
| emp2  | CREATE TABLE `emp2` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

3 显示指明表的存储引擎

mysql> create table emp2(id int) ENGINE = INNODB;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table emp2;
+-------+------------------------------------------------------------------------------------------+
| Table | Create Table                                                                             |
+-------+------------------------------------------------------------------------------------------+
| emp2  | CREATE TABLE `emp2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

4 存储引擎介绍

1 InnoDB引擎:具备外键功能的事务存储引擎
  • 5.5之后默认使用InnoDB存储引擎

  • InnoDB用来处理大量的短期事务,可以确保事务的完整提交和回滚

  • 除了查询和增加之外,还需要更新和删除操作,应该优先选择InnoDB存储引擎

  • 数据文件结构:

    • 表名.frm:存储表结构(8.0后合并在了ibd文件里面)
    • 表名.ibd:存储表数据索引
  • InnoDB是为了处理巨大数据量的最大性能设计

  • 对比MyIsam,InnoDB写的效率会差一些,并且会占用更多的磁盘空间保存数据和索引

  • MyISAM只缓存索引,而不缓存真实的数据;InnoDB不仅需要缓存索引还要缓存真实数据,对内存要求较高,而内存大小对性能有决定性影响。

    对内存要求较高是由于底层存储数据的结构的原因,相较于MyISAM而言

2 MyISAM引擎:主要的非事务存储引擎
  • MyISAM提供了大量特性,如全文检索压缩空间函数等,但MyISAM不支持事务行级锁外键,而且有一个很严重的缺陷:崩溃后无法安全恢复
  • 5.5之前的默认存储引擎
  • 优势是访问速度快,对事务没有要求或者以select、insert为主的应用
  • 针对数据统计有额外的常数存储,因此count(*)的查询效率很高
  • 数据结构文件:
    • 表名.frm:存储表结构
    • 表名.MYD:存储数据
    • 表名.MYI:存储索引
  • 应用场景:只读业务或者以读为主的业务
3 InnoDB与MyISAM的区别
image-20230311165555738

标签:存储,NO,mysql,引擎,InnoDB,MySQL,NULL
From: https://www.cnblogs.com/tod4/p/17226702.html

相关文章

  • MySQL(五)配置文件、系统变量与MySQL架构
    1配置文件的使用my.cnf配置文件/etc/my.cnf:[root@hadoop103~]#cat/etc/my.cnf#Foradviceonhowtochangesettingspleasesee#http://dev.mysql.com/doc/......
  • MySQL(八)哈希索引、AVL树、B树与B+树的比较
    Hash索引简介​ 这部分略了Hash索引效率高,为什么还要设计索引结构为树形结构?Hash索引仅能满足=、<>和IN查询,如果进行范围查询,哈希的索引会退化成O(n);而树型的有序特......
  • mysql注入读写文件
    mysql注入读文件mysq|数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够)。下面进行读文件。 load_file()函......
  • mysql 主从配置
    #master修改密码,创建用户,授权用户ALTERUSERUSER()IDENTIFIEDBY'mima';createuser'root'@'%'identifiedWITHmysql_native_passwordby'mima';grantallon*......
  • Splunk DB Connect 连接MySQL报错CLIENT_PLUGIN_AUTH is required
    01、问题描述使用SplunkDBConnect连接MySQL数据库读库时,报错CLIENT_PLUGIN_AUTHisrequired,如下图:02、原因分析根据报错信息,查阅相关资料,了解到报错原因:目标数据库......
  • 力扣197(MySQL)-上升的温度(简单)
    题目:表: Weather编写一个SQL查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。返回结果 不要求顺序 。查询结果格式如下例。 解题思路:方法一:使用......
  • mysql select @params:= 的问题
    1、创建班级表createtableclass(idintprimarykeyauto_increment,titlevarchar(50))2、添加测试数据insertintoclassvalues(null,'小班'),(nul......
  • MySQL错误:Access denied for user 'root'@'%' to database 'xxx'
    本篇记录了我在遇到该问题,解决该问题的全部过程,相信自己,还是很强大的,希望对遇到相似问题的网友有所帮助~本人Linux服务器,Centos7版本,Mysql5.7.14。。。最初问题:使用N......
  • mysql不同版本的功能差异
    概述mysql不同版本的功能差异介绍mysql的官网下载地址http://dev.mysql.com/downloads/MySQLCommunityServer(社区版)社区版本,免费,但是Mysql不提供官方技术支持......
  • 力扣196(MySQL)-删除重复的电子邮箱(简单)
    题目:表: Person编写一个SQL删除语句来删除所有重复的电子邮件,只保留一个id最小的唯一电子邮件。以任意顺序返回结果表。(注意:仅需要写删除语句,将自动对剩余结......