好的概述
一般来说,您要在快速读取时间(例如,嵌套集)或快速写入时间(邻接列表)之间做出决定.通常,您最终会得到最适合您需求的以下选项组合.以下提供了一些深入阅读:
选项
我知道和一般的功能:
O(n/2)移动,插入,由于易失性编码而删除O(log n)插入,更新,删除的成本(子树的大小)LEFT(lineage, #) = '/enumerated/path')O(log n)插入,更新,删除的成本(子树的大小)我有一个cms存储对文章的评论.这些注释可以是线程的,也可以是非线程的.虽然技术上它们是相同的,只是在没有线程的情况下,回复列留空.我的应用程序适用于sqlLite,MySQL和pgsql,所以我需要相当标准的SQL.
我目前有一个评论表
comment_id
article_id
user_id
comment
timestamp
thread (this is the reply column)
Run Code Online (Sandbox Code Playgroud)
我的问题是弄清楚如何最好地代表数据库中的线程注释.也许在一个单独的表中支持没有内容的树集和一个简单的表来保存文本?也许它已经是这样了?或许另一种方式?
如果注释是非线程的,我可以很容易地按时间戳排序.
如果他们是线程我就像这样
ORDER BY SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1))
Run Code Online (Sandbox Code Playgroud)
正如您在ORDER BY中看到的那样,注释查询将不会使用索引,因为基于函数的索引实际上只存在于Oracle中.帮我快速点评评论页面.