按多列排序结果?

时间:2016-02-24 03:17:22

标签: sqlite sorting

我正在使用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

这可行吗?如果有,那怎么做?

由于

1 个答案:

答案 0 :(得分:1)

order by中的键数对性能影响不大。如果您希望它更快,那么您可以使用索引:

create index idx_mytable_f1_f2_f3 on mytable(f1, f2, f3);