06-TiDB-数据库设计(库、表、索引)

1、创建库

CREATE DATABASE IF NOT EXISTS `bookshop`;

2、创建表

CREATE TABLE `bookshop`.`books` (
  `id` bigint(20) AUTO_RANDOM NOT NULL,
  `title` varchar(100) NOT NULL,
  `type` enum('Magazine', 'Novel', 'Life', 'Arts', 'Comics', 'Education & Reference', 'Humanities & Social Sciences', 'Science & Technology', 'Kids', 'Sports') NOT NULL,
  `published_at` datetime NOT NULL,
  `stock` int(11) DEFAULT '0',
  `price` decimal(15,2) DEFAULT '0.0',
  PRIMARY KEY (`id`) CLUSTERED
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

主键生成策略

AUTO_RANDOM 替换 AUTO_INCREMENT 属性来消除行 ID 的连续性

随机性,不能在插入或修改指定主键值

06-TiDB-数据库设计(库、表、索引)_第1张图片

-- 复合主键
    PRIMARY KEY (`book_id`,`user_id`) CLUSTERED
-- 防止重复
  `nickname` varchar(100) UNIQUE,
-- 防空
  `nickname` varchar(100) UNIQUE NOT NULL,

3、创建二级索引

二级索引是集群中的逻辑对象,你可以简单地认为它就是一种对数据的排序,TiDB 使用这种有序性来加速查询。TiDB 的创建二级索引的操作为在线操作,不会阻塞表中的数据读写。

-- 在已有的表创建
CREATE INDEX {index_name} ON {table_name} ({column_names});
-- 在新建表创建
KEY `{index_name}` (`{column_names}`)

4、建立索引前分析SQL

SELECT
    * 
FROM
    `bookshop`.`books` 
WHERE
    `published_at` >= '2022-01-01 00:00:00' 
    AND `published_at` < '2023-01-01 00:00:00';

5、建立索引

CREATE INDEX `idx_book_published_at` ON `bookshop`.`books` (`bookshop`.`books`.`published_at`);

6、查看表建立的索引

SHOW INDEXES FROM `bookshop`.`books`;

你可能感兴趣的:(TiDB分布式数据库,数据库,tidb)