MySQL04-表

前言

在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. 读/写分离
    经典的数据库拆分⽅案,主库负责写,从库负责读;
<think>好的,我现在需要帮用户选择一个适合他们Hive版本的MySQL镜像源。首先,用户提供的镜像源列中有很多MySQL的不同版本,从4.1到8.0,还有Cluster和工具相关的目录。我需要先回忆Hive通常兼容的MySQL版本。 Hive是一个数据仓库工具,通常用于Hadoop生态系统,它使用MySQL作为元数据存储。根据经验,Hive 3.x及以后的版本通常推荐使用MySQL 5.7或更高版本,而Hive 1.x和2.x可能兼容MySQL 5.6甚至更旧的版本。不过用户并没有明确说明他们的Hive版本,所以我可能需要做一些假设,或者提示用户提供更多信息。 在用户提供的镜像源中,MySQL的版本包括5.5、5.6、5.7、8.0等。最新的稳定版本应该是8.0,但需要确认Hive是否支持。因为MySQL 8.0在身份验证方式上有所改变,默认使用caching_sha2_password,而旧版的MySQL驱动可能不支持,需要额外配置。这可能带来兼容性问题。 如果用户使用的是较新的Hive版本(比如3.x),可能官方文档推荐MySQL 5.7或8.0,但需要注意驱动兼容性。而如果Hive版本较旧,可能需要选择5.6或更早的版本。例如,Hive 2.x可能官方支持到MySQL 5.7,但可能需要额外的JDBC驱动更新。 另外,用户提供的镜像源中,MySQL 5.7和8.0都有,同时还有Cluster版本,但Cluster通常用于分布式数据库,可能和Hive的元数据存储需求不太相关,除非用户有特殊需求。因此,建议用户选择常规的MySQL版本,如5.7或8.0。 不过,考虑到兼容性,大部分情况下Hive可能更稳定地运行在MySQL 5.7上,尤其是如果用户的Hive不是最新版。而如果用户使用的是最新Hive,可能已经适配了MySQL 8.0。此外,用户需要注意JDBC驱动版本是否支持对应的MySQL版本,比如使用MySQL Connector/J 8.x来连接MySQL 8.0。 总结,用户可能需要根据Hive的具体版本选择对应的MySQL版本,如果无法确定,建议选择较新且稳定的MySQL 5.7或8.0,同时注意驱动和配置的调整。需要提醒用户检查Hive官方文档的兼容性列,以确保没有兼容性问题。</think>根据你提供的镜像源列,选择MySQL版本时需要结合Hive官方文档的兼容性要求。以下是逐步分析: --- ### **1. 确认Hive与MySQL的兼容性** - Hive的元数据存储(Metastore)对MySQL版本有明确要求: - **Hive 1.x/2.x**:通常兼容MySQL **5.6/5.7** - **Hive 3.x+**:推荐使用MySQL **5.7/8.0**(需确认JDBC驱动是否支持) --- ### **2. 从镜像源中选择推荐版本** 根据你的镜像源,建议优先选择以下目录: - **稳定且广泛兼容**:$MySQL-5.7/$ - 支持Hive 1.x到3.x(需使用MySQL Connector/J 5.1.48+) - **最新版本**:$MySQL-8.0/$ - 仅适用于Hive 3.1.3+,且需配置`useSSL=false&allowPublicKeyRetrieval=true` --- ### **3. 不推荐版本** - **MySQL 5.6及以下**:$MySQL-5.6/$, $MySQL-5.5/$ - 较旧版本,可能缺少Hive Metastore所需功能。 - **MySQL Cluster系列**:如$MySQL-Cluster-7.6/$ - 专为高可用场景设计,常规Hive元数据存储无需使用。 --- ### **4. 操作建议** 1. **检查Hive版本**: - 若为Hive 3.x,优先选择$MySQL-8.0/$,否则选$MySQL-5.7/$。 2. **配置MySQL驱动**: - 下载对应版本的Connector/J([MySQL官网](https://dev.mysql.com/downloads/connector/j/)),放置到Hive的`lib`目录。 3. **修改Hive配置**(`hive-site.xml`): ```xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://your-mysql-host:3306/hive_metastore?createDatabaseIfNotExist=true</value> </property> ``` --- ### **5. 最终选择** 根据通用性推荐: $$ \boxed{MySQL-5.7/} $$ (若环境允许升级到Hive 3.x,可尝试$MySQL-8.0/$)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值