如何更改行的顺序,以便按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命令复制表。
答案 0 :(得分:3)
在mysql中获取排序结果集的唯一方法是在查询中添加ORDER BY
。
在mysql查询中优化查询速度。
这是不正确的。如果您遇到查询性能问题 - 请询问查询性能。给我们完整的表格结构,查询,数据的解释和统计。
答案 1 :(得分:1)
ALTER `tablename` ORDER BY `orderField` DESC;
但是每次插入后都必须执行此查询。请参阅13.1.7. ALTER TABLE
Syntax。
答案 2 :(得分:1)
保证结果集中顺序的唯一方法是使用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