MySQL Table:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
第16行: 第16行:


=== 临时表 ===
=== 临时表 ===
CREATE TEMPORARY TABLE
* 表结构、数据均存放在内存中
* 临时表在连接使用期间存在,断开时,MySQL 将自动删除表并释放所用的空间
* 不能用 rename 来重命名一个临时表,可以用 alter table 代替


=== 内存表 ===
=== 内存表 ===
ENGINE='''MEMORY'''
ENGINE='''MEMORY'''


表结构保存在磁盘上,数据存放在内存中(重启会只有结构)。
表结构保存在磁盘上,数据存放在内存中(重启会只有结构)。MEMORY 快大概 20%。


内存表的数据存放在内存中,而内部临时表(如查询时产生的)一般放在内存中,但当内部临时表较大时,会自动转化为磁盘存储。内存表不会自动转换。
内存表的数据存放在内存中,而内部临时表(如查询时产生的)一般放在内存中,但当内部临时表较大时,会自动转化为磁盘存储。内存表不会自动转换。


# 数据使用 hash 的方式存储,故只支持 = 或 <>
* 数据使用 hash 的方式存储,故只支持 = 或 <>
# max_heap_table_size 默认为 16777216,单张表行数超过则报错
* max_heap_table_size 默认为 16777216,单张表行数超过则报错
# 对于 varchar 等变长类型,使用最大的长度
* 对于 varchar 等变长类型,使用最大的长度
# 可以有非唯一键
* 可以有非唯一键
# 不能包含 BLOB 或者 TEXT
* 不能包含 BLOB 或者 TEXT
# 支持 AUTO_INCREMENT
* 支持 AUTO_INCREMENT
# 不支持事务,表锁
* 不支持事务,表锁
# 可能会插入延迟,使读取优先
* 可能会插入延迟,使读取优先

2023年10月28日 (六) 19:39的版本

Create Table

create table test_seq (
   ky               int auto_increment,
   val              varchar(50),
   ver              int unsigned,
   primary key(ky)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
auto_increment = 10000000
  • 一般排序规则默认为:utf8_unicode_ci
  • ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 默认值是库带过来的
  • auto_increment 为自增主键(该序必须设为主键),一般使用 int,小于 42 亿。也可以使用 double 这种浮点数,自增 +1,但可以指定插入 10.1 这种(下一个自增是 11)

分区表

最多支持 1024 个分区,同时总数量受库参数打开文件数量限制。

临时表

CREATE TEMPORARY TABLE

  • 表结构、数据均存放在内存中
  • 临时表在连接使用期间存在,断开时,MySQL 将自动删除表并释放所用的空间
  • 不能用 rename 来重命名一个临时表,可以用 alter table 代替

内存表

ENGINE=MEMORY

表结构保存在磁盘上,数据存放在内存中(重启会只有结构)。MEMORY 快大概 20%。

内存表的数据存放在内存中,而内部临时表(如查询时产生的)一般放在内存中,但当内部临时表较大时,会自动转化为磁盘存储。内存表不会自动转换。

  • 数据使用 hash 的方式存储,故只支持 = 或 <>
  • max_heap_table_size 默认为 16777216,单张表行数超过则报错
  • 对于 varchar 等变长类型,使用最大的长度
  • 可以有非唯一键
  • 不能包含 BLOB 或者 TEXT
  • 支持 AUTO_INCREMENT
  • 不支持事务,表锁
  • 可能会插入延迟,使读取优先