MySQL 5.7 表结构优化:小说书籍表 (novel_books)
MySQL 5.7 表结构优化:小说书籍表 (novel_books)
以下 SQL 语句展示了 novel_books 表的结构,并提供了一些优化建议:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for novel_books
-- ----------------------------
DROP TABLE IF EXISTS `novel_books`;
CREATE TABLE `novel_books` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '书籍id',
`book_id` char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '书籍id,根据id生成8位uuid',
`book_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '书籍类别',
`author_id` bigint(20) NOT NULL COMMENT '作者id',
`editor_id` int(11) NOT NULL COMMENT '负责编辑id',
`category_id` int(11) NOT NULL COMMENT '类型id',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '书籍标题',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '书籍描述',
`cover_image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '书籍封面链接',
`book_status` tinyint(1) NOT NULL COMMENT '连载状态',
`publication_status` tinyint(1) NOT NULL COMMENT '上架状态',
`contract_status` tinyint(1) NOT NULL COMMENT '签约状态',
`review_status` tinyint(1) NOT NULL COMMENT '审核状态',
`review_status_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '审核状态描述',
`book_tags` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '书籍标签',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `book_id`(`book_id`) USING BTREE,
INDEX `fk_books_author_id`(`author_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
优化建议:
-
使用合适的数据类型:
book_id从varchar(16)改为char(8),节省存储空间,提高查询效率。book_status、publication_status、contract_status、review_status从int(10) UNSIGNED ZEROFILL改为tinyint(1),节省存储空间,提高查询效率。
-
添加索引:
- 在
book_id和author_id上添加索引,提高根据书籍 ID 和作者 ID 查询数据的效率。 - 考虑根据
category_id、book_status、publication_status等字段添加索引,以提高特定条件下的查询效率。
- 在
-
分区表:
- 如果数据量很大,可以考虑按照
create_time进行按月分区,将数据分隔到不同的分区中,提高查询效率和管理数据。
- 如果数据量很大,可以考虑按照
-
优化查询语句:
- 避免使用
SELECT *,只查询需要的字段,减少数据传输量,提高查询效率。 - 使用
EXPLAIN分析查询语句,查看索引的使用情况,优化索引的使用。 - 避免使用子查询和
OR等效率低下的语句,可以使用连接查询和IN等更高效的语句。
- 避免使用
注意: 优化方案需要根据实际情况进行调整,建议进行测试比较不同方案的性能表现,选择最佳方案。
其他优化方案:
- 考虑使用
ENUM或SET类型存储一些有限选项的字段,例如book_status、publication_status等。 - 使用
JSON类型存储book_tags字段,方便管理和查询标签信息。 - 将
description字段设置为MEDIUMTEXT或LONGTEXT类型,根据实际需求选择合适的数据类型。 - 考虑使用缓存机制,例如 Redis 或 Memcached,提高数据读取效率。
通过以上优化措施,可以有效地提高 novel_books 表的性能和效率,为应用提供更快的响应速度和更稳定的数据服务。
原文地址: https://www.cveoy.top/t/topic/m8aA 著作权归作者所有。请勿转载和采集!