我正在使用SQLite 3.11。我按如下方式创建了一个表:
CREATE TABLE MyTable (F1 INTEGER, F2 INTEGER, F3 INTEGER);
然后添加以下记录:
INSERT INTO MyTable (F1, F2, F3) Values (1, 2, 8);
INSERT INTO MyTable (F1, F2, F3) Values (1, 3, 9);
INSERT INTO MyTable (F1, F2, F3) Values (2, 4, 8);
INSERT INTO MyTable (F1, F2, F3) Values (2, 5, 2);
INSERT INTO MyTable (F1, F2, F3) Values (3, 6, 4);
INSERT INTO MyTable (F1, F2, F3) Values (3, 7, 8);
INSERT INTO MyTable (F1, F2, F3) Values (4, 2, 4);
INSERT INTO MyTable (F1, F2, F3) Values (4, 2, 6);
现在,如果我想从MyTable中选择,并根据F1(上升)对结果进行排序,对于具有相同F1的两个记录,则根据F2(上升)进行排序,然后根据F3(上升)进行排序使用以下内容:
SELECT * FROM MyTable ORDER BY F1, F2, F3?
我检查了SQLite文档并且它说“首先根据ORDER BY列表中最左边表达式的结果对行进行排序,然后通过评估第二个最左边的表达式来打破绑定,依此类推。”所以根据我的理解,我的陈述是正确的。
此外,由于排序将频繁执行,为了提高性能,我想添加一个字段F4,然后更新表,以便所有记录都有一个唯一的F4值,这是基于上面的顺序序列order by子句,因此如果我想再次选择,我不再需要使用ORDER BY F1,F2,F3,而是可以使用:
SELECT * FROM MyTable ORDER BY F4
这可行吗?如果有,那怎么做?
由于
答案 0 :(得分:1)
order by
中的键数对性能影响不大。如果您希望它更快,那么您可以使用索引:
create index idx_mytable_f1_f2_f3 on mytable(f1, f2, f3);