我们正在开发一个预付卡平台,该平台主要保存有关卡及其余额、付款等的数据。
到目前为止,我们有一个 Card 实体,它有一个 Account 实体的集合,每个 Account 都有一个 Amount,它在每次存款/取款时更新。
现在团队中有一场辩论;有人告诉我们,这违反了Codd 的 12 条规则,并且在每次付款时更新其价值很麻烦。
这真的有问题吗?
如果是,我们如何解决这个问题?
我们需要添加一个新的独特属性,它仅与特定子集(小于 1%)相关。我们认为最好添加一个 1-1 的新表,而不是添加一个 99% 的时间为 Null 的新列。
新表是首选方式吗?
问完这个问题后,我开始思考为什么某个查询会出现所有问题。
简而言之,有一个查询需要 500 毫秒,我运行了一些执行计划并应用了推荐的索引,但它只截断了大约 50-60 毫秒。
再次运行后,我发现以下查询(发生在多个位置)真的很慢:
SELECT @TempCardNumber = CardNumber
FROM Cards
WHERE (CardNumber=@CardNumber or FullCardNumber=@CardNumber)
Run Code Online (Sandbox Code Playgroud)
当我把它改成
SELECT @TempCardNumber = CardNumber
FROM Cards
WHERE (CardNumber=@CardNumber)
Run Code Online (Sandbox Code Playgroud)
它跑得超级快,甚至删除索引也没有太大关系,让我相信这是主要的瓶颈,但我不明白..这有什么问题?