存储引擎MyISAM和InnoDB

存储引擎:创建、查询、更新、删除

innoDB:64T、支持事物、不支持全文索引、支持缓存、支持外键、行级锁定

MyISAM:256T、不支持事物、支持全文索引、插入和查询速度快

memory:内存、不支持事物、不支持全文索引,临时表

archive:none、不支持事物、不支持全文索引,insert,select

myisam:

frm:表的结构信息

myd:数据部分

myi:索引 (创建索引越多,myi越大)

innoDB:

frm:数据表的元数据

ibd:数据

opt:mysql的配置信息

创建"users"表查看默认存储引擎:

修改配置文件中引擎名创建t1表,查看存储引擎名看是否是自己修改的引擎名:

创建t2表的同时指定存储引擎:

创建t3表,使用set命令临时修改存储引擎:

MyISam和InnoDB实例比较

1:创建两张表分别以MyIsam和InnoDB作为存储引擎

create database test;

use test;

create table tm(id int(20) primary key auto_increment,name char(30)) engine=myisam;

create table ti(id int(20) primary key auto_increment,name char(30)) engine=innodb;

查看两张表的存储引擎:

mysql> show create table tm\G

mysql> show create table ti\G

2:插入一千万数据,来比较两个存储引擎的存储效率

(1)设置sql语句结束符

mysql> delimiter $

(delimiter 语句是设置sql语句的结束符为"")

(2)创建两个存储过程

mysql> create procedure insertm()

begin

set @i=1;

while @i

do

insert into tm(name) values(concat("wy",@i));

set @i=@i+1;

end while;

end

$

mysql> create procedure inserti()

begin

set @i=1;

while @i

do

insert into ti(name) values(concat("wy",@i));

set @i=@i+1;

end while;

end

$

mysql> delimiter ;

(delimiter ;语句是设置sql语句的结束符为";")

(3)利用存储过程向两个表添加数据插入(一千万条)MyIsam存储引擎的表中的时间如下:

mysql> call insertm;

Query OK, 0 rows affected (1 min 49.74 sec)

插入(一千万条)InnoDB存储引擎的表中的时间如下:

mysql> call inserti;

Query OK, 0 rows affected (13 min 32.96 sec)

比较结果:

MyIsam存储引擎在写入方面有优势

3:查询数据总数目

下面是InnoDB的SQL语句的分析:

MariaDB [test]> desc select count(*) from ti\G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: ti

type: index

possible_keys: NULL

key: PRIMARY

key_len: 4

ref: NULL

rows: 1000160

Extra: Using index

1 row in set (0.00 sec)

下面是MyIsam(他的数据存储在其他的表中所以这里是没有影响行数的)的SQL语句的分析:

riaDB [test]> desc select count(*) from tm\G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: NULL

type: NULL

possible_keys: NULL

key: NULL

key_len: NULL

ref: NULL

rows: NULL

Extra: Select tables optimized away

1 row in set (0.00 sec)

MyIsam使用专门的MYD表存储数据,所以这里没有查询结果

MyISAM存储引擎会是数据表生成3个文件:

frm文件存储表的定义、MYD文件是数据文件、MYI文件是索引文件

4:查询某一范围的数据

(1)没有索引的列

MariaDB [test]> select * from tm where name>"wy100" and name

+---------+-----------+

| id | name |

+---------+-----------+

| 1000 | wy1000 |

| 10000 | wy10000 |

| 100000 | wy100000 |

| 1000000 | wy1000000 |

+---------+-----------+

4 rows in set (0.68 sec)

MariaDB [test]> select * from ti where name>"wy100" and name

+---------+-----------+

| id | name |

+---------+-----------+

| 1000 | wy1000 |

| 10000 | wy10000 |

| 100000 | wy100000 |

| 1000000 | wy1000000 |

+---------+-----------+

4 rows in set (2.71 sec)

MariaDB [test]> select * from tm where name="wy9999999";

+---------+-----------+

| id | name |

+---------+-----------+

| 9999999 | wy9999999 |

+---------+-----------+

1 row in set (0.42 sec)

MariaDB [test]> select * from ti where name="wy9999999";

+---------+-----------+

| id | name |

+---------+-----------+

| 9999999 | wy9999999 |

+---------+-----------+

1 row in set (2.38 sec)

无索引查询MyIsam有优势

(2)有索引的列

对于使用MyIsam存储引擎的表:

select * from tm where id>10 and id

执行时间:

9999988 rows in set (1.88 sec)

对于使用了InnoDB存储引擎的表:

select * from ti where id>10 and id

执行时间:

9999988 rows in set (0.65 sec)

有索引查询INNODB有优势

相关推荐
工程师老罗3 小时前
如何在Android工程中配置NDK版本
android
Libraeking6 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位6 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1238 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs9 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob9 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔9 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9969 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly11 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首12 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节