欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL 8.0 引擎和索引

程序员文章站 2024-03-17 14:22:22
...

1、存储引擎

数据库底层饿软件组织,创建,查询,更新,删除数据等借助于存储引擎

插件式存储引擎,可插拔。

存储机制,索引技巧,锁定粒度等功能。选择不同的存储引擎。

Mysql5.5默认InnoDB

1、mysql 中支持哪些存储引擎

show engines;

2、存储引擎对比

MySQL 8.0 引擎和索引

  • InnoDB

    Mysql 5.5 以后默认的存储引擎。事务型数据库。

    1、数据底层的存储:数据表文件—>frm(表结构)文件和.ibd(数据和索引)文件

    2、事务:支持热备,数据完整性要求比较高,比较好的选择

    3、锁的粒度:采用MVVC(多版本并发)支持高并发操作,支持四种事物隔离界别,行锁。

    4、储存特点:采用聚簇索引

    5、场景

    1、更新和查询频繁,并发
    2、要求事物
    3、外键约束
    
  • MyISAM

    1、存储形式:数据表文件---->.frm和.MYD和MYI(数据和索引分离)

    2、事务:不支持

    3、存储特点:非聚簇

    4、其他:全文检索,压缩,延迟更新索引等

    5、场景:

    1、count 计算
    2、查询
    
  • Memory

    数据保存在内存中,增删改查效率高,但是不能持久化

    不支持事务,表级锁。

3.如何设置存储引擎

/etc/my.cnf   ----一般安装的位置

修改存储引擎
default_storage_engine = INNODB   (需重启服务)

创建表时修改存储引擎:
creat table tname(col) engine = INNODB; (单单是一张表)

查看某张表的基本信息:
show tables status from dbname where name = tname \G;
show create table 表名 \G; ---也可以查看 

如果你MAC,而且用homebrew 安装默认位置:
MySQL 8.0 引擎和索引

2、索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。

根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少256字节。大多数存储引擎有高度的限制。MySQL 中索引的存储类型有两种:BTREE 和 HASH ,具体和表的存储引擎相关;MyISAM 和 InnoDB 存储引擎只支持BTREE索引;MEMORY/HEAP 存储引擎可以支持HASH 和BTREE索引。

1、索引分类

  • 普通索引和唯一索引
  • 单列索引和组合索引
  • 全文索引
  • 空间索引

2、创建索引

CREATE TABLE table_name [col_name data_type]
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length]) [ASC | DESC]
---UNIQUE、FULLTEXT和SPATIAL 为可选参数,分别表示为唯一索引、全文索引和空间索引;INDEX 和 KEY 为同义词,用来指定创建索引;col_name 为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;index_name 指定索引的名称,为可选参数,如果不指定,那么MySQL 默认col_name 为索引值;length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;ASC或DESC 指定升序或者降序的索引值存储。
---唯一索引,关键字取上述 UNIQUE 即可。
---单列索引和组合索引,只需要创建表的时候,INDEX index_name(字段名1,...,...)

3、创建全文索引

FULLTEXT 全文索引可以用于全文搜索。只有MySQL存储引擎支持FULLTEXT 索引,并且只为CHAR、VARCHAR 和 TEXT 列创建索引。索引总是对整个列进行,不支持局部索引。

  • 因为MySQL 8.0 默认的存储引擎为InnoDB,所以在这里创建表时需要修改表的存储引擎为MyISAM,不然创建索引会出错。
SHOW CREATE table_name \G;
----可以查看表结构

4、创建空间索引

  • 注意创建时指定空间类型字段值得非空约束,并且表的存储引擎为MyISAM。

5、在已经存在的表上创建索引

ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length],...) [ASC | DESC]
---- 与创建索引的语法差不多
例子:
ALTER TABLE book ADD INDEX bkidx(bookname(30));
---在bookname 字段上添加索引,索引名为bkidx

6、删除索引

ALTER TABLE table_name DROP INDEX index_name;
或者使用
DROP INDEX index_name ON table_name;
下面有几个注意点:
1、添加AUTO_INCREMENT 约束字段的唯一索引不能被删除。
2、删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除了,则整个索引将被删除。

欢迎大家提出问题

相关标签: MySQL 8.0