按链对列表中的元素进行排序

本文关键字:元素 排序 列表 | 更新日期: 2023-09-27 18:30:45

我有一个元素数据库,其中包含一个指定排序的参数,其属性如下:

 ID
 Name
 Order

假设 order 是一个整数 - 很容易按 Order 进行查询和排序。但是,如果我想在此列表之间插入一个新元素,我必须重新编号它下面的所有内容 - 最坏的情况是我想将元素推到顶部。

所以我有这个想法,通过链对元素进行排序。也就是说,我有一个包含我的元素的表:

ID
Name

然后我有第二个带有边缘的表:

StartNode
EndNode

这只是定义哪个元素连接到哪个其他元素。这样,当我想插入一个元素时,我只需要删除一个边缘并放入另一个边缘 - 我不需要对整个列表重新排序。

但是,有没有一种有效的方法来查询以从这两个表中获取有序列表?这种方法有某种名称吗?

按链对列表中的元素进行排序

有趣的问题!正如starlight54所指出的,这种方法被称为链表,特别是双向链表虽然我认为严格来说,在链表中,对其他节点的引用是节点本身的一部分。用数据库术语来说:数据库记录本身具有下一个和上一个节点的外键(即双向链表)。但对于现在传来的坏消息来说,这并不重要。

你是绝对正确的,链表允许非常有效地插入(和删除)节点。但坏消息是订购效率非常低。

关键是链表需要顺序访问:首先你必须找到第一个节点,然后是下一个节点,然后是下一个节点,...无法在一个包含 ORDER BY 的 SQL 语句中获取有序列表。SQL(专为集合操作而设计)和顺序访问是两个不同的世界。

最糟糕的方法是将每个节点与数据库分开查询。一个改进是获取所有节点并在内存中构建一个有序列表,但这永远不会令人愉快。

所以我会坚持这个Order专栏。通常读取数据的频率远远高于修改频率,因此以牺牲易于访问为代价来优化更新速度并不是最明显的事情。