【问题标题】:Sequel gem reorder postgres database?续集 gem 重新排序 postgres 数据库?
【发布时间】:2018-07-24 12:46:15
【问题描述】:

我正在使用带有 300k+ 条目的 postgres 数据库的 Sequel gem。我正在尝试按时间获取最早和最新的条目,但是我迁移了数据库,并且一些条目在时间上出现了乱序。

如果我使用mydb[:items].firstmydb[:items].last,查询需要几分之一秒。但是,就像我说的那样,它们的时间顺序并不完全,所以可能会搞砸。如果我运行 mydb[:items].order(:time).firstmydb[:items].order(:time).last,它可以工作,但完成每个查询需要更长的时间(大约 6 秒)。

有没有办法重新排序数据库,所以它自然地按时间顺序排列,所以我不必运行 order 命令?还是我只是做错了什么?

【问题讨论】:

    标签: ruby postgresql sequel


    【解决方案1】:

    如果您想按特定顺序获取记录,则必须使用 order 子句。如果没有提供排序子句,大多数数据库不保证顺序。

    您应该按将用于排序的字段为您的表格编制索引。

    【讨论】:

    • 您能否澄清一下 - 您的意思是我应该重新创建表格吗?还是您在谈论一些存在的功能?
    • 没有。无论你重新创建表,记录都不会按顺序检索,除非你在查询中指定了顺序(如order(:time))。所以重要的是按用于按顺序获取记录的字段对数据库进行索引。如果您希望记录按时间排序,则必须具有基于时间字段的索引。您的表格是否按时间编入索引?
    • 我正在谷歌搜索以尝试理解您的意思 - 我对数据库不是很有经验,所以我不知道您创建索引是什么意思。
    • CREATE INDEX index_name ON table_name (column_name);在您的情况下:CREATE INDEX mydb_time_index ON mydb (time)(假设表称为 mydb,列称为时间,如您的 OP 所述)。
    • 您继续指定列名。数据库知道该列有一个索引。
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多