SQLite案例陈述是否昂贵?

SQLite案例陈述是否昂贵?,sql,mysql,sqlite,Sql,Mysql,Sqlite,我想知道是否不建议在SQLite(或其他SQL引擎)中使用CASE语句来替换数据。例如,假设我有一个查询 SELECT Users, CASE WHEN Active = 0 THEN 'Inactive' WHEN Active = 1 THEN 'Active' WHEN Active = 2 THEN 'Processing'

我想知道是否不建议在SQLite(或其他SQL引擎)中使用CASE语句来替换数据。例如,假设我有一个查询

SELECT Users, 
                CASE WHEN Active = 0 THEN 'Inactive'
                        WHEN Active = 1 THEN 'Active'
                        WHEN Active = 2 THEN 'Processing'
                        ELSE 'ERROR' END AS Active
FROM UsersTable;

何时最好创建一个引用表并执行联接。在本例中,我将创建一个带有ActiveID、ActiveDescription的表“ActiveStatesTable”,并执行联接。

case语句是首选语法:

  • 它是ANSI(92?),所以MySQL、Oracle、SQL Server、Postgres等都支持它。。。与数据库供应商特定的IF语法不同
  • 它支持短循环-一旦条件匹配,就不会执行其余的评估

编写单独的表和联接绝对是编写此代码的更简洁的方法。例如,如果要使用相同的映射编写另一个查询,会发生什么情况?您必须将CASE语句复制到新查询中,而复制是不好的。如果需要添加新的活动状态,会发生什么情况


就性能而言,连接和案例都应该相当便宜。CASE的性能可能会稍高一点,因为求值短路和很少的CASE,但在我看来,JOIN是更干净、更灵活、更具SQL ey的解决方案。

CASE应该便宜得多,因为它不应该涉及任何I/O,但对于小表,联接也没有那么昂贵(但一定要测试它)


问题是您是否需要在几个查询中维护此案例,以及是否需要在其上建立任何引用完整性。

这是真的,但维护案例不会太困难,因为我可以创建一个包含案例的视图,然后维护该视图。这是真的,但是维护案例不会太困难,因为我可以创建一个包含案例的视图,然后维护该视图。对于少数案例和例外情况,这可能很容易,但仍应予以考虑。忽略完整性,在视图中维护它与在表中维护它是不同的(您不能基于查询更新转换)。这是有意义的。我将添加一个表并执行一些基准测试。完成后我会发布结果。是否应该考虑案例陈述的大小?如果表中有一列“Description ID”,并且有100个描述需要映射,该怎么办?