小编典典

SQL:如果字段不为空,如何按字段排序,否则使用另一个字段

sql

我想PostsdtModified(不修改日期时间)将其排序(不修改dtPosted日期时间),否则按(不发布日期时间)排序


阅读 518

收藏
2021-04-07

共1个答案

小编典典

似乎我每周在这里就此给出3条建议,也许我应该放弃并放任它:-)不,我不这么认为:

__order by 如果希望数据库很好地扩展,请 不要 在列计算(或子句)中使用逐行函数。你应该为你的具体情况检查性能( 测量,不要猜测
),但是当做计算 读取 数据库通常会影响你的能力,规模(这不会不管你的通讯录数据库,但我工作在有店铺 巨大的 数额数据的)。

“我如何使我的数据库运行得更快?”的数字是多少?问题远远超过“我如何使用更少的空间?” 那些。这是一条牺牲磁盘空间以提高性能的理想途径。

正确的时间是在数据更改时进行计算。这样,更改成本将在所有读取中摊销。

我的建议是创建另一列,如dtLastAction包含排序值然后使用插入/更新触发器将其设置为相同的dtModified,如果不为空,或者dtPosted如果dtModified为空。从技术上讲,这违反了3NF,但是如果您知道自己在做什么就可以了,并且触发器可以确保这种情况下的数据一致性。

然后在该dtLastAction列上建立索引,以提高查询速度,而在插入和更新过程中以(较少的)额外工作量得到了提高。我之所以说得少,是因为 绝大多数
数据库表的读取频率高于写入的频率(显然,如果您的特殊情况是非常罕见的例外之一,则此方法无用)。

或者,对于这种特殊情况,可以在创建条目时将dtModified和设置dtPosted为相同的值,这意味着它dtModified永远不会
空。您仍然可以检测到由于这两个日期时间值相同而从未被修改的帖子。

2021-04-07