- 关于 TiDB
- 快速上手
- 应用开发
- 概览
- 快速开始
- 示例程序
- 连接到 TiDB
- 数据库模式设计
- 数据写入
- 数据读取
- 事务
- 优化 SQL 性能
- 故障诊断
- 引用文档
- 云原生开发环境
- 部署标准集群
- 数据迁移
- 运维操作
- 监控与告警
- 故障诊断
- 性能调优
- 优化手册
- 配置调优
- SQL 性能调优
- SQL 性能调优概览
- 理解 TiDB 执行计划
- SQL 优化流程
- 控制执行计划
- 教程
- 同城多中心部署
- 两地三中心部署
- 同城两中心部署
- 读取历史数据
- 使用 Stale Read 功能读取历史数据(推荐)
- 使用系统变量
tidb_snapshot
读取历史数据
- 最佳实践
- Placement Rules 使用文档
- Load Base Split 使用文档
- Store Limit 使用文档
- TiDB 工具
- 功能概览
- 适用场景
- 工具下载
- TiUP
- 文档地图
- 概览
- 术语及核心概念
- TiUP 组件管理
- FAQ
- 故障排查
- TiUP 命令参考手册
- 命令概览
- TiUP 命令
- TiUP Cluster 命令
- TiUP Cluster 命令概览
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUP DM 命令
- TiUP DM 命令概览
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDB 集群拓扑文件配置
- DM 集群拓扑文件配置
- TiUP 镜像参考指南
- TiUP 组件文档
- PingCAP Clinic 诊断服务 (Technical Preview)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDB Data Migration
- 关于 Data Migration
- 架构简介
- 快速开始
- 部署 DM 集群
- 入门指南
- 进阶教程
- 运维管理
- 参考手册
- 使用示例
- 异常解决
- 版本发布历史
- Backup & Restore (BR)
- TiDB Binlog
- TiCDC
- TiUniManager
- sync-diff-inspector
- TiSpark
- 参考指南
- 架构
- 监控指标
- 安全加固
- 权限
- SQL
- SQL 语言结构和语法
- SQL 语句
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER TABLE COMPACT
ALTER USER
ANALYZE TABLE
BACKUP
BATCH
BEGIN
CHANGE COLUMN
CHANGE DRAINER
CHANGE PUMP
COMMIT
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW [BACKUPS|RESTORES]
SHOW ANALYZE STATUS
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- 数据类型
- 函数与操作符
- 聚簇索引
- 约束
- 生成列
- SQL 模式
- 表属性
- 事务
- 视图
- 分区表
- 临时表
- 缓存表
- 字符集和排序
- Placement Rules in SQL
- 系统表
mysql
- INFORMATION_SCHEMA
- Overview
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- CLI
- 命令行参数
- 配置文件参数
- 系统变量
- 存储引擎
- 遥测
- 错误码
- 通过拓扑 label 进行副本调度
- 常见问题解答 (FAQ)
- 版本发布历史
- 术语表
概述
本页概述了 TiDB 中的数据库模式。将从本页开始围绕 Bookshop 这个应用程序来对 TiDB 的设计数据库部分展开介绍。并使用此数据库做后续数据的写入、读取示例。
术语歧义
此处术语会有歧义,为消除歧义,在此作出数据库模式设计文档部分中的术语简要约定:
为避免和通用术语数据库 (Database) 混淆,因此将逻辑对象称为数据库 (Database),TiDB 仍使用原名称,并将 TiDB 的部署实例称为集群 (Cluster)。
因为 TiDB 使用与 MySQL 兼容的语法,在此语法下,模式 (Schema) 仅代表通用术语定义,并无逻辑对象定义,可参考此官方文档。若你从其他拥有 Schema 逻辑对象的数据库(如:PostgreSQL、Oracle、Microsoft SQL Server 等)迁移而来,请注意此区别。
数据库 Database
TiDB 语境中的 Database 或者说数据库,可以认为是表和索引等对象的集合。
TiDB 集群包含一个名为 test
的数据库。但建议你自行创建数据库,而不是使用 test
数据库。
表 Table
TiDB 语境中的 Table 或者说表,从属于某个数据库。
表包含数据行。每行数据中的每个值都属于一个特定的列。每列都只允许单一数据类型的数据值。列可添加约束来进一步限定。你还可以添加生成列(实验特性)用于计算。
索引 Index
索引是单个表中行的副本,按列或列集排序。TiDB 查询使用索引来更有效的查找表内的数据,同时可以给出特定列的值。每个索引都是从属于某个表的。
索引有两种常见的类型,分别为:
- Primary Key: 即主键索引,即标识在主键列上的索引。
- Secondary Index: 即二级索引,即在非主键上标识的索引。
专用索引
TiDB 支持一些特殊场景专用的索引,用以提高特定用例中的查询性能。有关这些专用索引的介绍,请参阅以下页面:
索引和约束 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
表达式索引 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
列式存储 (TiFlash) | Y | Y | Y | Y | Y | Y |
RocksDB 引擎 | Y | Y | Y | Y | Y | Y |
Titan 插件 | Y | Y | Y | Y | Y | Y |
不可见索引 | Y | Y | Y | Y | Y | N |
复合主键 | Y | Y | Y | Y | Y | Y |
唯一约束 | Y | Y | Y | Y | Y | Y |
整型主键上的聚簇索引 | Y | Y | Y | Y | Y | Y |
复合或非整型主键上的聚簇索引 | Y | Y | Y | Y | Y | N |
其他对象
TiDB 支持一些和表同级的对象:
访问控制
TiDB 支持基于用户或角色的访问控制。你可以通过角色或直接指向用户,从而授予用户查看、修改或删除 数据对象和数据模式的权限。
执行数据库模式更改
不推荐使用客户端的 Driver 或 ORM 来执行数据库模式的更改。以经验来看,作为最佳实践,建议使用 MySQL 客户端或使用任意你喜欢的 GUI 客户端来进行数据库模式的更改。本文档中,将在大多数场景下,使用 MySQL 客户端 传入 SQL 文件来执行数据库模式的更改。
对象大小限制
此处摘录一些常见的对象大小限制,详细使用限制请查阅此文档。
标识符长度限制
对象 | 限制 |
---|---|
数据库名称 | 64 字符 |
表名称 | 64 字符 |
列名称 | 64 字符 |
索引名称 | 64 字符 |
视图名称 | 64 字符 |
序列名称 | 64 字符 |
单个表内限制
对象 | 限制 |
---|---|
列数 | 默认为 1017,最大可调至 4096 |
索引数 | 默认为 64,最大可调至 512 |
分区数 | 8192 |
单行大小 | 默认为 6MB,可通过 txn-entry-size-limit 配置项调整 |
单行内单列大小 | 6MB |
字符串类型限制
对象 | 限制 |
---|---|
CHAR | 256 字符 |
BINARY | 256 字节 |
VARBINARY | 65535 字节 |
VARCHAR | 16383 字符 |
TEXT | 6MB |
BLOB | 6MB |
行数
TiDB 可通过增加集群的节点数来支持任意数量的行,原理可阅读 TiDB 最佳实践