如何更改行的顺序以使行按custom_field排序?MySQL - 如何更改表中行的顺序
例如,我得到了表与ID为ASC,并希望有desc顺序的行。我需要它以便不使用mysql查询中的'order by id desc'来优化查询速度。
我想:
insert table_with_ordered_rows()
select * from table_with_not_ordered_rows order by id desc;
,但它只是复制标准递增顺序表。
如何更改行的顺序以使行按custom_field排序?MySQL - 如何更改表中行的顺序
例如,我得到了表与ID为ASC,并希望有desc顺序的行。我需要它以便不使用mysql查询中的'order by id desc'来优化查询速度。
我想:
insert table_with_ordered_rows()
select * from table_with_not_ordered_rows order by id desc;
,但它只是复制标准递增顺序表。
在mysql中获取排序结果集的唯一方法是在查询中添加ORDER BY
。
在mysql查询中优化查询速度。
这是不正确的。如果您在查询性能方面存在问题 - 请询问查询性能。给我们完整的表格结构,查询,数据解释和统计。
ALTER `tablename` ORDER BY `orderField` DESC;
但是,您必须在每次插入后执行此查询。见13.1.7. ALTER TABLE
Syntax。
这将工作,直到再添加一行。另外 - 如果你使用任何'WHERE'子句,mysql不需要按这个顺序返回数据。 – zerkms 2011-04-19 00:51:01
确保结果集中订单的唯一方法是使用ORDER BY
子句。一个ORDER BY
可以使用索引,如果存在的话......
这就是说,以下为我工作在MySQL上49年5月1日:
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
表格非常简单,但该表格中有大约100万行,所以'order by'会大大减慢查询速度。 – Newbie1 2011-04-19 00:58:11
@ Newbie1:正如我所说 - 如果你想解决你的任务 - 你需要询问有关查询问题的正确问题。 – zerkms 2011-04-19 01:24:57