【发布时间】:2012-04-26 12:05:31
【问题描述】:
有一个我正在转换到 JVM 的旧式 LAMP 应用程序。
有问题的问题需要一个包含@250K 记录的评分表。目前,“scoreType”列表示为 tinyint,其中 1 = 目标,2 = 辅助 1,3 = 辅助 2。
对于得分领先者,要获得每个球员的进球/助攻 1/助攻 2 总数,查询 sn-p 如下所示:
SUM(IF(scoreType=1,1,0)) AS goals, SUM(IF(scoreType=2,1,IF(scoreType=3,1,0))) AS assists
很公平,可以完成这项工作,但我想知道,就一般模式设计而言,查询上下文将需要 SUM、COUNT 等操作,是否最好突破限制像目标/助攻1/助攻2、赢/输/领带等选择集到单独的列中,而不是tinyint方法?
在单独的列中,查询变为:
SUM(goal) AS goal, SUM(assist1) AS assist1, SUM(assist2) AS assist2
以略微增加存储空间为代价(3 列对 1 列)以提高性能(不需要 if(cond,a,b) 匹配)。
在应用层,一个潜在的重大胜利是从 ORM 不支持的 SUM(if()) 转移到 column.Sum();否则,我需要使用多合一列的方法保留非静态类型的字符串 SQL 查询
想法?您将如何处理、保持原样或将数据库和应用程序代码迁移到 3 列方法?
感谢您的反馈!
【问题讨论】:
标签: java mysql sum lamp multiple-columns