[英]MYSQL table and column naming convention
我很想知道在mysql表名和列名的性能方面什么是最佳命名约定。 我正在为我的项目设计一个新的数据库。
到目前为止我使用的是使用描述性的表/列名称,有时看起来很长,但我认为它有助于轻松理解表的使用/功能。
例如,见下面的DDL:
CREATE TABLE `product_configuration` (
`product_configuration_id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(20) NOT NULL,
`product_size_id` int(20) NOT NULL,
`product_color_id` int(20) NOT NULL,
`price` float NOT NULL,
`image` varchar(255) DEFAULT NULL,
`locked` tinyint(1) DEFAULT '0' COMMENT '1=locked, 0 =unlocked. if locked then this row can''t be deleted/updated',
`active` tinyint(1) DEFAULT '1' COMMENT '1=active, 0=inactive and wont display on frontend',
PRIMARY KEY (`product_configuration_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2342 DEFAULT CHARSET=latin1
另一个DDL,我使用上面的DDL主键作为外键:
CREATE TABLE `product` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(255) NOT NULL,
`product_description` varchar(255) NOT NULL,
`product_image` varchar(255) NOT NULL,
`price` float NOT NULL,
`active` tinyint(1) NOT NULL COMMENT '1=active, 0=inactive',
`date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`product_type_id` int(11) DEFAULT NULL,
`date_modified` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1
基本上我在表中的大多数列名中使用带有表名作为前缀的单个表名,并且我保留了主键和外键的相同名称和数据类型,以便我可以轻松地知道哪个外键与哪个主键/表相关。
但我想知道,当数据库大小增加时,使用长表/列名称会对性能产生影响。 喜欢而不是仅仅使用“id”作为主键我使用long“product_configuration_id”。
此外,如果我将表/列命名为大写和小写混合像
“ProductConfiguration”
用于表名和
“ProductConfigurationId”
对于列名称将具有任何性能影响或linux / windows环境兼容性问题。
长表和列名称不会对(任何重大的)性能产生影响。 在查询的编译阶段,所有表和列引用都将转换为内部定位器。 因此,唯一的影响是必须查询更长的查询字符串。 从性能角度来看,通常会忽略查询编译的解析部分。
以下是基于意见的。 作为一般规则,我遵循这些约定来命名:
Id
。 order by 1 desc
来获取添加到表中的最新行。 using
for join
s。 我承认这些是“基于意见的”,所以你的问题的真正答案在第一段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.