4
mysql int vs varchar作为主键(InnoDB存储引擎?
我正在构建一个Web应用程序(项目管理系统),并且在性能方面一直想知道这一点。 我有一个Issues表,里面有12个外键链接到其他各种表。在其中的8个中,我需要加入才能从其他表中获取title字段,以便使记录在Web应用程序中有意义,但是,这意味着进行8个加入似乎非常繁琐,尤其是因为我只是在拉入这些联接中的每个联接都有1个字段。 现在,出于永久性的原因,我还被告知要使用自动递增的主键(除非考虑到分片,在这种情况下我应该使用GUID),但是在性能上使用varchar(最大长度为32)有多糟糕?我的意思是,这些表中的大多数可能不会有很多记录(其中大多数应该在20以下)。另外,如果我使用标题作为主键,则不必在95%的时间内进行联接,因此对于95%的sql,我什至会发生任何性能下降(我认为)。我唯一能想到的缺点是我将拥有更高的磁盘空间使用率(但是一天下来确实是一件大事)。 我将查找表用于很多此类而不是枚举的原因是因为我需要最终用户可以通过应用程序本身配置所有这些值。 将varchar用作不包含很多记录的表的主键有什么弊端? 更新-一些测试 因此,我决定对此做一些基本测试。我有100000条记录,这些是基本查询: 基本VARCHAR FK查询 SELECT i.id, i.key, i.title, i.reporterUserUsername, i.assignedUserUsername, i.projectTitle, i.ProjectComponentTitle, i.affectedProjectVersionTitle, i.originalFixedProjectVersionTitle, i.fixedProjectVersionTitle, i.durationEstimate, i.storyPoints, i.dueDate, i.issueSecurityLevelId, i.creatorUserUsername, i.createdTimestamp, i.updatedTimestamp, i.issueTypeId, i.issueStatusId FROM ProjectManagement.Issues i 基本INT FK查询 SELECT i.id, i.key, i.title, ru.username as reporterUserUsername, au.username as assignedUserUsername, p.title as projectTitle, pc.title as ProjectComponentTitle, …