当前位置: 首页 > 面试题库 >

案例陈述与编码的if陈述

吴谦
2023-03-14
问题内容

更有效的方法是-
在sql中使用case语句处理,或在代码中使用if语句处理相同的数据。我问是因为我的同事有一个很大的查询,其中包含许多案例陈述。我建议她通过编写case语句来减轻数据库的压力。我发现它更有效…但是为什么呢?


问题答案:

这里没有一个更基本的问题:这些CASE语句实际上在做什么?

一分钟忘了表演。如果CASE仅用于转换查询的最终输出,并且实际上可以用ifselect case在ASP中替换相同的功能,则可能意味着数据库查询/过程正在尝试执行UI应负责的事情例如格式。关注点分离问题比任何可能的性能问题都更为严重。

如果您有这样的查询:

SELECT InvoiceID, InvoiceDate,
    CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END
FROM ...

这真是愚蠢的,因为UI或进行数据到域映射的任何层都应该知道如何将数据库中的状态转换为其相应的描述。在查询本身中包含此逻辑没有任何意义。

另一方面,如果CASE构造是查询的必要组成部分,例如:

SELECT
    SUM(CASE WHEN PaidStatus = 0 THEN Amount ELSE 0 END) AS TotalUnpaid,
    SUM(CASE WHEN PaidStatus = 1 THEN Amount ELSE 0 END) AS TotalPaid
FROM ...

甚至不要尝试将这种逻辑移至UI,因为数据库 好得多。并且在CASE语义上是查询的一部分(“计算 x的已
付款和未付款总额”),它不会接管任何UI函数。

首先,要根据逻辑要完成的工作来担心逻辑实际上在哪里。仅当您实际上注意到严重的性能 问题时, 才应该对性能问题进行讨论。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 10年前关闭。 可能的重复: “ else if”是否比“ switch()case”更快? Java中if / else与switch语句的相对性能差异是什么? 我知道case语句可以用跳转表实现。这是否使它们比if语句更有效? 只是应该避免这种微观优化吗? 问题答案: 我认为主要是尽可能清楚地编写代码。 这样的微优化不应该成为重点。 例如,如果您有这

  • 问题内容: MySQL中的Case表达式和Case语句有什么区别?什么时候可以使用它们?与另一种相比,使用它们有什么好处? Case Statement语法: 案例表达语法: 这些看起来几乎相同,但是对Case Statements的最初描述是: 那么,在存储程序中使用一个而不在普通查询中使用它的显着区别是吗?我在正在使用的查询中尝试了此操作,但失败了-sqlfiddle。如果是这种情况,为什么不

  • 问题内容: 我有一个数据库表’ tbl_transaction ‘,其定义如下: 我想生成两列:和。 是否可以仅使用SQL查询有条件地填充列,以使输出显示在正确的列中,具体取决于它是费用项目还是收入项目? 例如: 我正在使用MySQL作为数据库。我正在尝试使用CASE语句来完成此任务。 干杯! 问题答案: 是的,像这样: 正如其他答案所指出的那样,MySQL还具有使用较少冗长语法的功能。我通常尝试

  • 问题内容: 我真的在LINQ上挣扎。我已经用SQL编写了查询(实际上这是一个关键点),并试图在LINQ中编写等效的语句。任何前进的指针将不胜感激。参见下面的代码: 非常感谢。 问题答案: 我认为这应该可以满足您的要求-至少值得一试:

  • 问题内容: 昨天我们遇到了一个场景,其中必须获取a的类型,并且在此基础上我们必须编写该字段的描述。喜欢 我建议编写一个db函数而不是case语句,因为那样会更可重用。喜欢 有趣的是,使用数据库的功能将是一个说我们的开发人员的 效率低下 的是 慢 比。我在互联网上搜索了答案,这在效率方面是更好的方法,但是不幸的是,我没有发现任何可以满足的答案。请您的想法启发我,哪种方法更好? 问题答案: UDF f

  • 问题内容: 有没有一种方法来定义像新语句,,我自己在Python的?当然,我并不是要覆盖现有的语句,而只是创建自己的语句。 如果是这样,我该怎么办?您能指出我有关该主题的好文档吗? 问题答案: 不可以,您不能在Python程序中添加新语法。更改语言的唯一方法是编辑并重新编译语法文件和支持C代码,以获得新的更改后的解释器,编译器和运行时。