当前位置: 代码迷 >> 综合 >> MySQL04-表
  详细解决方案

MySQL04-表

热度:17   发布时间:2023-11-15 05:20:05.0

  • 前言
  • InnoDB逻辑存储结构
  • 约束
    • InnoDB的几种约束
    • 约束和索引的区别?
    • 主键和索引的区别?
    • 那主键和唯一索引的区别?
    • 那么实际使用中都有什么类型的索引呢?
  • 分区

前言

在InnoDB存储引擎中,表都是根据主键的顺序组织存放的,这种存储方式的表称为索引组织表(index organized table)。在InnoDB存储引擎表中,每张表都有一个主键,如果创建表的时候没有显示的定义主键,InnoDB存储引擎会按如下方式选择或创建主键

  • 首先判断表中是否有非空的唯一性索引,如果有,则该列为主键
  • 如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针

当表中有多个非空唯一索引时,InnoDB存储引擎选择建表时第一个定义的非空唯一索引为主键

InnoDB逻辑存储结构

在这里插入图片描述

约束

约束机制,保证了数据库中数据的完整性

数据的完整性:存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。

InnoDB的几种约束

  1. Primary Key
  2. Unique
  3. Foreign Key
  4. Default
  5. NOT NULL

PRIMARY KEY 约束:
唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键

UNIQUE KEY约束:
唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束

FOREIGN KEY约束:
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)

约束和索引的区别?

约束是一个逻辑的概念,用来保证数据的完整性
索引是一个数据结构,既有逻辑上的概念,在数据库中还代表着物理存储的方式。

主键和索引的区别?

主键是一种约束,用来保证数据库中的数据完整性,
由于在数据库中为表定义主键将自动创建主键索引,所以也可以这样理解主键属于索引的一种,主键索引是唯一索引的特定类型。

那主键和唯一索引的区别?

  1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。

  2. 一个表中可以有多个唯一性索引,但只能有一个主键。

  3. 主键列不允许空值,而唯一性索引列允许空值

那么实际使用中都有什么类型的索引呢?

UNIQUE:ADD UNIQUE INDEX('test');
NORMAL:ADD INDEX('test');
FULL TEXT:ADD FULLTEXT INDEX('test');
SPATIAL:ADD SPATIAL INDEX('test');

分区

当MySQL单表记录数过?时,数据库的CRUD性能会明显下降,?些常?的优化措施如下

  1. 垂直分区
    将同一张表中不同列的记录分配到不同的物理文件中
  2. ?平分区
    将同一张表中不同行的记录分配到不同的物理文件中(MySQL 支持)

除分区外其他的优化方法

  1. 限定数据的范围
    务必禁?不带任何限制数据范围条件的查询语句。?如:我们当?户在查询订单历史的时候,我们可以控制在?个?的范围内;
  2. 读/写分离
    经典的数据库拆分?案,主库负责写,从库负责读;