本文档详细阐述了MySQL设计和使用的一些规范,涵盖了表设计、索引创建、SQL语句以及其它相关方面,旨在提高数据库性能和管理效率。
在表设计方面,遵循以下原则:
1. 库名、表名和字段名应使用小写字母并用下划线分隔,长度限制在12个字符以内,以便于阅读和维护。
2. 名称应具有描述性,使用名词而非动词,如"users"而非"user_list",以便直观理解其用途。
3. 建议使用InnoDB存储引擎,因为它支持事务处理和行级锁定,适合高并发环境。
4. 对于精确的浮点数,推荐使用DECIMAL类型,避免FLOAT和DOUBLE的精度问题。
5. 使用UNSIGNED存储非负数值,可以提升存储效率和表示范围。
6. 存储IPv4地址时,推荐使用INT UNSIGNED类型。
7. 整形定义时,不指定长度,如使用INT而非INT(4),避免误导。
8. 选择最短的数据类型,例如对于0-80的范围,使用TINYINT UNSIGNED。
9. 避免使用ENUM类型,改用TINYINT,因为ENUM的扩展性和查询性能较差。
10. 尽可能减少对TEXT和BLOB类型的使用,它们占用大量空间且处理速度慢。
11. VARCHAR类型的长度N应根据实际需求设定,注意N表示字符数,且表中所有VARCHAR字段总长度不能超过65535字节。
12. 使用VARBINARY存储变长二进制字符串。
13. 年份存储使用YEAR类型,日期使用DATE,时间精确到秒则使用TIMESTAMP,以节省存储空间。
14. 建议字段默认为NOT NULL,以确保数据完整性。
15. 大字段应拆分到单独的表,以优化主表性能。
16. 不在数据库中存储图片或文件,而应使用文件系统或专门的文件存储服务。
17. 表结构变动需经过DBA审核,确保变更的合理性和安全性。
在索引设计上,有以下要点:
1. 非唯一索引命名规则为"idx_字段名称_字段名称[_字段名]",唯一索引为"uniq_字段名称_字段名称[_字段名]",便于识别。
2. 索引名称统一为小写,增加一致性。
3. 索引字段数尽量控制在5个以内,以保持查询效率。
4. 单表索引数量建议不超过5个,避免过多索引导致的维护成本和写操作性能下降。
5. 当唯一键由3个以下整型字段组成时,可考虑用作主键。
6. 若没有合适的唯一键或不符合上述条件,可使用自增ID或发号器生成的ID作为主键。
7. 主键与唯一键应保持独立,避免重复。
这些规范不仅有助于提高数据库的性能,也有利于团队协作和数据库的长期维护。在实际应用中,应结合具体业务场景灵活调整,确保设计的合理性。