插入可能的SQL排序?

joh*_*sam 3 sql sqlite sorting insert

在SQL中,在插入预先排序的表时,是否可以在将行与整个表一起排序时插入一行?如

create table positional_order (
  num number,
  txt varchar2(10)
);
Run Code Online (Sandbox Code Playgroud)

现有表格

row 1   (3, 'three' );
row 2   (4, 'four' );
Run Code Online (Sandbox Code Playgroud)

插入一个新行

row 3   (1, 'one');
Run Code Online (Sandbox Code Playgroud)

插入后

桌子变成了

row 1   (1, 'one');
row 2   (3, 'three' );
row 3   (4, 'four' );
Run Code Online (Sandbox Code Playgroud)

这可能吗?

或者我必须将行插入表中,然后选择顺序?

顺便说一句,我正在使用sqlite.

谢谢,

Jos*_*ehl 7

据我所知,在特定位置插入行不是任何标准SQL数据库的一部分.数据库的部分工作是确定如何逻辑存储行.正如您所说,订单行的时间是使用ORDER BY进行SELECT时.

如果您担心性能,请在"数字"列上创建索引.更多关于索引的信息


jmo*_*eno 5

简短的答案:表格是集合,没有顺序。

长话大说:聚集索引已尽其所能,即使并不是真的那么紧密-不需要排序,查询引擎可以自由地以其认为最佳的顺序返回结果。聚集索引将意味着仅对该表的查询将很可能以为索引定义的顺序返回行,但不要指望它。话虽如此,所有索引都定义了一个顺序,而聚集索引定义了磁盘上记录的顺序,尽管这不能保证您的结果以任何特定顺序排列,但在大多数情况下确实可以保证结果的顺序。但是在将聚集索引用于除自动生成/增加的列以外的任何内容之前,我会仔细考虑。如果您插入具有聚簇索引的表,则可能必须重定位磁盘上的记录,这就是一个昂贵的操作。