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;

优化建议:

  1. 使用合适的数据类型:

    • book_idvarchar(16) 改为 char(8),节省存储空间,提高查询效率。
    • book_statuspublication_statuscontract_statusreview_statusint(10) UNSIGNED ZEROFILL 改为 tinyint(1),节省存储空间,提高查询效率。
  2. 添加索引:

    • book_idauthor_id 上添加索引,提高根据书籍 ID 和作者 ID 查询数据的效率。
    • 考虑根据 category_idbook_statuspublication_status 等字段添加索引,以提高特定条件下的查询效率。
  3. 分区表:

    • 如果数据量很大,可以考虑按照 create_time 进行按月分区,将数据分隔到不同的分区中,提高查询效率和管理数据。
  4. 优化查询语句:

    • 避免使用 SELECT *,只查询需要的字段,减少数据传输量,提高查询效率。
    • 使用 EXPLAIN 分析查询语句,查看索引的使用情况,优化索引的使用。
    • 避免使用子查询和 OR 等效率低下的语句,可以使用连接查询和 IN 等更高效的语句。

注意: 优化方案需要根据实际情况进行调整,建议进行测试比较不同方案的性能表现,选择最佳方案。

其他优化方案:

  • 考虑使用 ENUMSET 类型存储一些有限选项的字段,例如 book_statuspublication_status 等。
  • 使用 JSON 类型存储 book_tags 字段,方便管理和查询标签信息。
  • description 字段设置为 MEDIUMTEXTLONGTEXT 类型,根据实际需求选择合适的数据类型。
  • 考虑使用缓存机制,例如 Redis 或 Memcached,提高数据读取效率。

通过以上优化措施,可以有效地提高 novel_books 表的性能和效率,为应用提供更快的响应速度和更稳定的数据服务。

MySQL 5.7 表结构优化:小说书籍表 (novel_books)

原文地址: https://www.cveoy.top/t/topic/m8aA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录