【问题标题】:MySQL SELECT reverse query by DB physical insertionMySQL SELECT 通过数据库物理插入反向查询
【发布时间】:2012-09-16 11:05:22
【问题描述】:

这个查询:

SELECT * FROM table WHERE field = 'EN'

我想以相反(desc)的顺序修改选择,因为它已物理插入到数据库中,没有任何索引使用(类似于:DESC NO-INDEX)?

有可能吗?

【问题讨论】:

  • @user166489。不要认为正确的答案只会是肯定的:)实际上否定是正确的答案,但是您可以接受具有最佳推理能力的答案。

标签: mysql select indexing


【解决方案1】:

MyISAM 使用插入顺序存储项目,并用新行填充已删除的行(您可以在 select * from... without order 中看到它)。默认情况下不保存在数据库中的插入顺序(如果您想使用自动增量字段来存储此顺序,您可以)。

INNODB 按 PK 存储行,因此无论何时插入行,您都可以select ... from ... order by PK desc

【讨论】:

    【解决方案2】:

    除非您有一个反映物理插入顺序的列,否则您不能(使用或不使用索引)。

    您只能按查询包含的数据对查询进行排序。如果您没有存储某种形式的插入时间戳或 id,则无法生成所需的订单。

    【讨论】:

    • MySQL 表是否保留任何唯一的行 ID?像 RECID 或 ROWID 一样排序?
    【解决方案3】:

    由于数据库中的各种空间重用策略,这实际上是不可能的。可能最接近您的是读取没有指定任何顺序的记录,然后以相反的方向遍历您的结果集。

    【讨论】:

    • 您的意思是在选择后处理反向数组是个好主意吗?因为表有大约 2kk 行太大...
    • 使用LIMIT 并一次处理一页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2012-07-11
    • 2023-03-18
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多