小说用户表结构优化 - MySQL 5.7
小说用户表结构优化 - MySQL 5.7
本文介绍了如何优化 MySQL 5.7 中的 novel_user 表结构,以提高性能和数据完整性。
原始 SQL 代码:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for novel_user
-- ----------------------------
DROP TABLE IF EXISTS `novel_user`;
CREATE TABLE `novel_user` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像地址',
`source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '三方',
`source_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '三方id',
`review_status` int(10) UNSIGNED ZEROFILL NOT NULL COMMENT '审核状态',
`review_status_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 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 `uk_username`(`username`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
优化措施:
- 更改存储引擎: 将表的存储引擎从 MyISAM 改为 InnoDB,因为 InnoDB 支持事务和行级锁定,能够提高并发性能和数据完整性。
- 更改字符集: 将字符集从
utf8mb4_general_ci改为utf8mb4_unicode_ci,因为utf8mb4_unicode_ci比utf8mb4_general_ci更准确地处理字符排序和比较。 - 调整字段类型:
- 将
review_status_msg字段改为 TEXT 类型,因为varchar(255)可能无法存储大量的审核状态描述信息,而 TEXT 类型可以存储更多的文本信息。 - 将
username字段改为varchar(16),因为 32 个字符对于用户名来说可能过长,且减小字段长度可以降低存储空间和提高查询性能。 - 将
source、source_user_id、create_by、update_by、remark字段改为 TEXT 类型,因为这些字段可能包含大量的文本信息。
- 将
- 添加索引: 如在
review_status字段上添加索引,以加快审核状态查询的速度。 - 使用分区表: 使用分区表来分割数据,以提高查询性能和减少数据维护成本。
- 定期清理无用数据和索引: 以提高数据查询和维护的效率。
优化后的 SQL 代码:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for novel_user
-- ----------------------------
DROP TABLE IF EXISTS `novel_user`;
CREATE TABLE `novel_user` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像地址',
`source` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '三方',
`source_user_id` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '三方id',
`review_status` int(10) UNSIGNED ZEROFILL NOT NULL COMMENT '审核状态',
`review_status_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '审核状态描述',
`create_by` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_username`(`username`) USING BTREE,
KEY `idx_review_status` (`review_status`)
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
注意:
- 以上只是一些常见的优化建议,具体需要根据实际情况进行调整。
- 在进行任何数据库更改之前,请务必备份数据。
- 分区表需要根据数据量和访问模式进行设计,以获得最佳效果。
- 定期清理无用数据和索引可以提高数据库的性能和效率。
通过以上优化措施,可以有效提高 novel_user 表的性能和数据完整性,为小说平台提供更好的用户体验。
原文地址: https://www.cveoy.top/t/topic/m8aU 著作权归作者所有。请勿转载和采集!