提问人:Andy Thomas 提问时间:11/9/2023 更新时间:11/9/2023 访问量:30
在sqlite中将null排序到底部,并使用预先存在的索引
Sort nulls to bottom in sqlite AND use pre-existing index
问:
我有一个以用户界面表形式呈现的 sqlite 数据库表。用户可以单击列标题以指定多列排序顺序。有些列是文本,有些是整数或实数。
该表可能足够大,以至于创建临时索引会引入可观察且令人讨厌的延迟。所以我想使用预先存在的索引。例如:
CREATE INDEX MyTable_name on MyTable ( name, color, position );
但我也希望空和空格排序到底部。所以我的查询可以包含一个 ORDER BY,如下所示:
ORDER BY (CASE WHEN ((name IS NULL) OR (name = '')) THEN 1 ELSE 0 END) ASC, name ASC,
(CASE WHEN ((color IS NULL) OR (color = '')) THEN 1 ELSE 0 END) ASC, color ASC,
(CASE WHEN ((position IS NULL) OR (position = '')) THEN 1 ELSE 0 END) ASC, position ASC
这与更简单的索引不匹配,因此 sqlite 将创建一个适当的临时索引。
QUERY PLAN
|--SCAN MyTable
`--USE TEMP B-TREE FOR ORDER BY
我怎样才能将空值排序到底部并使用预先存在的索引?
我突然想到,我可以通过用预先计算的 1 或 0 值对每一列进行阴影处理来解决这个问题,并将这些阴影列添加到索引和 ORDER BY 中。我希望有一个更简单的解决方案。
答: 暂无答案
评论