【发布时间】:2014-05-14 01:17:00
【问题描述】:
我的数据库中有一个表。
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| rollno | int(11) | NO | | NULL | |
| name | varchar(20) | NO | | NULL | |
| marks | int(11) | NO | | NULL | |
+--------+-------------+------+-----+---------+----------------+
如果我查询默认情况下
select * from students;
显示按id INT (auto-increment)排序的结果。
+----+--------+------------+-------+
| id | rollno | name | marks |
+----+--------+------------+-------+
| 1 | 65 | John Doe | 89 |
| 2 | 62 | John Skeet | 76 |
| 3 | 33 | Mike Ross | 78 |
+----+--------+------------+-------+
3 rows in set (0.00 sec)
我想更改默认排序行为并将rollno 设为默认排序字段,我该怎么做?
【问题讨论】:
-
只需订购您想要订购的东西
-
在我的情况下,我大部分时间都需要按 rollno 对其进行排序,所以我希望如果它默认按该顺序存储,我就不必在每个查询中进行排序。
-
您所要求的基本上是不可能的。这将需要在每次更新时不断地使用表,任何 SQL 引擎都不会因为显而易见的原因而这样做。这样做比简单地在查询中添加
ORDER BY复杂得多。 -
在我的情况下,插入/更新与选择相比要少得多,这就是为什么我要坚持修改排序。
-
没有意义。 Mysql(或任何其他 DBMS)不会对表进行排序。从技术上讲,您可以在每次插入/更新后运行
ALTER TABLE students ORDER BY rollno ASC;,但与仅对select的结果进行排序相比,您会受到巨大的性能影响。对整个表进行排序,还是仅对select语句的结果进行排序,哪个更昂贵?是什么阻止您将order by添加到您的select语句中?
标签: mysql sql database sorting