【问题标题】:database row/ record pointers数据库行/记录指针
【发布时间】:2023-04-05 10:25:02
【问题描述】:

我不知道我要查找的内容的正确词,因此很难在谷歌上搜索。

我想知道它是否可以使用数据库(独立于技术,但有兴趣了解它是否可以使用 Oracle、MySQL 和 Postgres)指向特定行而不是再次执行我的查询。

所以我最初可能会执行一个查询,找到一些感兴趣的行,然后希望通过指针列表或其他一些元数据来避免再次搜索它们,这些元数据指示数据库上的位置,我可以直接在下一个是时候我想要那些结果了。

我意识到数据库上有缓存,但我想将这些“指针”保留在其他地方,因为这样的缓存最终并不能解决这个问题。这只是一个索引,我存储索引并以此查找吗?我当前的大多数表都没有索引,我不希望索引有时会降低速度。

那么我一直试图在 google 中使用的神奇术语是什么?

干杯

【问题讨论】:

  • 要么您有一个真正独特的数据库方案(例如,仅存储),要么您必须再次查找索引的优缺点。另请注意,考虑到往返时间、处理开销等,单独通过“指针”查询许多行可能无效(即使是聚集索引)。
  • 为了系统,我认为数据库可以被认为是只读的,我永远不需要从这个系统更新或插入。我需要做一些我猜想通过指针来确定是否合适的总和——还有更多的阅读要做。
  • 如果您的系统是“主要阅读”,那么索引将大大提高检索时间;唯一的成本是索引的存储空间加上一个小的开销(可能无法衡量)决定哪个是用于查询的最佳索引。如果您的系统是“主要更新”(因此您做了很多更改),那么也许(但只有也许)索引的成本超过了它们的好处。即使这样,通常每个表至少有一个索引(用于主键) - 您只需减少辅助索引的数量。
  • 如果空间是一个考虑因素(即你不希望表和索引之间的数据重复),Oracle 有索引组织表的选项,其中主键索引和表是相同的. SQL Server 也这样做。不确定 Postgres/MySQL。

标签: database oracle postgresql indexing information-retrieval


【解决方案1】:

在 Oracle 中,它被称为 ROWID。它标识该块中的文件、块号和行号。我不能说你所描述的是一个好主意,但这至少可以让你开始寻找正确的方向。

点击此处了解更多信息:http://www.orafaq.com/wiki/ROWID

顺便说一句,您担心的“索引带来的速度下降”只有在您执行的插入和更新操作多于读取操作时才有意义。索引只会加快读取速度,因此如果读取率很高,您可能不会遇到问题,索引可能是您的最佳解决方案。

【讨论】:

  • 我没有我们的架构,所以我不知道我们是否使用索引,我只是在周末有了一些想法。也许这就是要走的路。
  • 我仍然认为索引是您需要查看的地方,但无论哪种方式都祝您好运。
【解决方案2】:

我目前的大多数表都没有 索引,我不想要速度 有时伴随的减少 索引。

而且您也不希望索引通常会带来速度提升,而是想要手动滚动定制的伪缓存?

我不是在这里刻薄,这是一个严肃的观点。数据库设计人员花费了大量的技能和精力来优化他们的产品。学习如何利用他们的努力而不是重新实现一些核心功能不是更明智吗?

【讨论】:

    【解决方案3】:

    一般来说,处理这类需求的最佳方法是使用主键(或者实际上是任何方便、紧凑的唯一标识符)作为“指针”,并依靠索引查找来快速 - 它通常会。

    除了 Oracle,您还可以在更多 DBMS 中使用 ROWID,但出于各种原因或原因,通常不建议使用它。如果您屈服于“每个表都有一个自增列”的数据库设计学派,那么您可以将自增列值记录为标识符。

    您应该在(几乎)所有表上至少有一个索引 - 该索引将用于主键。例外情况可能是一个很小的表,它很容易放入内存中并且不会被更新,并且将被使用到不会被从内存中逐出。那么索引可能会分散注意力;但是,此类表通常很少更新,因此索引不会损害任何内容,如果索引没有帮助(也可能没有),优化器将忽略它。

    您还可以有辅助索引。在大多数活动都在读取数据的系统中,您可能希望在拥有更多而不是更少的索引方面犯错,因为访问时间是最关键的。如果您的系统是更新密集型的,那么您将使用更少的索引,因为在添加、删除或更新数据时更新索引会产生相关成本。显然,您需要设计索引以与您的用户实际执行(或您的应用程序执行)的查询很好地配合。

    【讨论】:

      【解决方案4】:

      您可能还对cursors 感兴趣。 (请注意,索引辩论对游标仍然有效。)

      Wikipedia definition 在这里。

      【讨论】:

        猜你喜欢
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-22
        • 2023-04-01
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多