【问题标题】:MySQL - How to change the order of rows in the tableMySQL - 如何更改表中的行顺序
【发布时间】:2011-04-19 00:46:46
【问题描述】:

如何更改行的顺序以使行按 custom_field 排序?

例如,我有一个 id 为 asc 的表,并希望将行按 desc 顺序排列。我需要它是为了不在mysql查询中使用'order by id desc'来优化查询速度。

我试过了:

insert table_with_ordered_rows() 
select * from table_with_not_ordered_rows order by id desc;

但它只是按照标准 asc 顺序复制表。

【问题讨论】:

    标签: php mysql sql sql-order-by


    【解决方案1】:

    在mysql中获取排序结果集的唯一方法是在查询中添加ORDER BY

    在mysql查询中优化查询速度。

    这是不正确的。如果您对查询性能有疑问 - 然后询问查询性能。给我们完整的表结构、查询、解释和数据统计。

    【讨论】:

    • 表非常简单,但该表中大约有数百万行,因此“order by”会大大降低查询速度。
    • @Newbie1:正如我所说 - 如果你想解决你的任务 - 你需要就查询问题提出适当的问题。
    【解决方案2】:

    保证结果集中顺序的唯一方法是使用ORDER BY 子句。 ORDER BY 可以使用索引,如果存在的话...

    也就是说,以下在 MySQL 5.1.49 上对我有用:

    CREATE TABLE `t1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `col` varchar(45) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$
    
    INSERT INTO t1 (col) VALUES ('a'),('b'),('c');
    

    结果集:

    id  col
    --------
    1   a
    2   b
    3   c
    

    中间表:

    CREATE TABLE `t2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `col` varchar(45) DEFAULT NULL,
      `old_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$
    
    INSERT INTO t2 (col, old_id)
      SELECT t.col, t.id
        FROM t1 t
    ORDER BY t.id DESC
    

    结果集:

    id  col  old_id
    ----------------
    1   c    3
    2   b    2
    3   a    1
    

    【讨论】:

    • 有效!谢谢!您说“保证结果集中顺序的唯一方法是使用 ORDER BY 子句”,但 ORDER BY 会减慢查询速度,即使有不错的优化和索引,所以插入的默认顺序可以解决它或者你有更好的主意吗?
    • 但这并不是我真正想要实现的目标,因为我希望将 id 分配给旧表中的行,并且只需更改行的顺序(如插入顺序)。
    【解决方案3】:
    ALTER `tablename` ORDER BY `orderField` DESC;
    

    但您必须在每次插入后执行此查询。见13.1.7. ALTER TABLE Syntax

    【讨论】:

    • 这将一直有效,直到再添加一行。另外 - 如果您使用任何WHERE 子句,mysql 不需要按此顺序返回数据。
    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多