存储引擎与索引 | Mysql笔记(三)

161 阅读2分钟

存储引擎

比如现在有一张表employees,我们可以通过show create table employees;来查看创建表的时候的引擎。

image.png

同样,我们也可以在建表的时候,自己定义Engine:

create table [name](
    field1 type
    field2 type
)engine=InnoDB;

使用show engines;查看有哪些引擎

image.png

InnoDB引擎

InnoDB特点

  • DML操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能
  • 支持外键 Foerign Key约束,保证数据的完整性和正确性

InnoDB文件

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

InnoDB存储结构

image.png

MyISAM引擎

image.png

Memory引擎

image.png

三种引擎的比较

image.png

image.png

索引

创建索引

create [UNIQUE | FULLTEXT] INDEX index_name on table_name(field,...);

查看索引

show INDEX from table_name;

删除索引

drop index index_name on table_name;

实操

在创建联合索引的时候,按照最左匹配原则进行创建,也就是使用最多的放在左边。

image.png

image.png

SQL性能优化

使用show global status like 'Com_______';查看最多调用的几样内容。(七个下划线)

image.png

索引的使用(重点)

假设现在有一张数据量为10w的表,我们对这个表进行查询操作。

image.png 可以看到访问时间高达11s

我们也可以查询普通数据

image.png

在数据量非常大的时候,如果仅仅采用普通查询的方式,需要进行比较的次数是非常多的,而且耗时也相当高。

我们现在对sn这个字段创建索引,然后通过这个索引进行操作。

实操

首先创建索引:create index idx_sn on tb_sku(sn);

然后再通过 select * from tb_sku where sn='1000000003145001';查找这条数据

image.png花费1min11.2s建立索引。

image.png

花费0.01s查询到结果,对比上面不使用索引花费22s查询到结果,这个速度提升了几个数量级。

使用索引不需要额外的语句,就使用普通的查询语句就行。