sid 是主键   order_no  是唯一索引谁能帮我解释一下3次查询结果 为什么不一样, 在3个sql 的排序规则都是什么mysql> select sid,order_no,order_status from oms_order   limit 10;
+-----+----------------+--------------+
| sid | order_no       | order_status |
+-----+----------------+--------------+
|  20 | 20100319000003 |            0 |
|  21 | 20100319000004 |            0 |
|  63 | 20100319000046 |           -1 |
|  69 | 20100320000006 |            0 |
|  76 | 20100323000001 |            0 |
|  77 | 20100323000002 |            0 |
|  78 | 20100323000003 |            0 |
|  79 | 20100323000004 |            8 |
|  86 | 20100324000007 |           -1 |
|  93 | 20100324000014 |           -1 |
+-----+----------------+--------------+
10 rows in set (0.00 sec)mysql> select sid,order_status from oms_order   limit 10;
+-----+--------------+
| sid | order_status |
+-----+--------------+
| 240 |           -1 |
| 261 |           -1 |
| 263 |           -1 |
| 285 |           -1 |
| 286 |           -1 |
| 288 |           -1 |
| 339 |           -1 |
| 383 |           -1 |
| 387 |           -1 |
| 452 |           -1 |
+-----+--------------+
10 rows in set (0.00 sec)mysql> select sid from oms_order   limit 10;
+---------+
| sid     |
+---------+
| 1171641 |
| 1171651 |
| 1171661 |
| 1171671 |
| 1171681 |
| 1171691 |
| 1171701 |
|      20 |
|      21 |
|      63 |
+---------+
10 rows in set (0.00 sec)

解决方案 »

  1.   

    没有加 order by 的话,查出来的就是物理顺序,如果没有做过删除操作,那么应该是这样的:select sid,order_no,order_status from oms_order limit 10;
    这个肯定优先使用 sid 排序,再使用 order_no 排序select sid,order_status from oms_order limit 10;
    sid 排序select sid from oms_order limit 10;
    这个只有 sid,只好使用它排序了,看上去 sid 是字符型的数据,所以 1171701 在 20 前。
      

  2.   

    先不说内部机制怎么处理的 你这连order by都不用  limit个什么劲啊 取前十个 怎么取都不告诉数据库  让数据库猜吗
      

  3.   

    第一句是 数据存储顺序 
    第二句 为什么和第一句结果不一样?
    第三句  sid   bigint(20)    但是下面的id 是今天用程序插入的 | 1171641 |
    | 1171651 |
    | 1171661 |
    | 1171671 |
    | 1171681 |
    | 1171691 |
    | 1171701 |
      

  4.   

    我的本意 就是取表里 物理存储的 前十个数据。 用order by  就不会出现我上面的问题了 
      

  5.   

    原因我知道了  谢谢各位mysql> explain select sid,order_status from oms_order   limit 10;
    +----+-------------+-----------+-------+---------------+----------------------+---------+------+---------+-------------+
    | id | select_type | table     | type  | possible_keys | key                  | key_len | ref  | rows    | Extra       |
    +----+-------------+-----------+-------+---------------+----------------------+---------+------+---------+-------------+
    |  1 | SIMPLE      | oms_order | index | NULL          | IND_order_mem_status | 13      | NULL | 1139498 | Using index |
    +----+-------------+-----------+-------+---------------+----------------------+---------+------+---------+-------------+
    1 row in set (0.00 sec)mysql> 
    mysql> 
    mysql> explain  select sid,order_no,order_status from oms_order   limit 10;
    +----+-------------+-----------+------+---------------+------+---------+------+---------+-------+
    | id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows    | Extra |
    +----+-------------+-----------+------+---------------+------+---------+------+---------+-------+
    |  1 | SIMPLE      | oms_order | ALL  | NULL          | NULL | NULL    | NULL | 1139498 |       |
    +----+-------------+-----------+------+---------------+------+---------+------+---------+-------+
    1 row in set (0.00 sec)mysql> explain select sid from oms_order   limit 10;
    +----+-------------+-----------+-------+---------------+--------------------+---------+------+---------+-------------+
    | id | select_type | table     | type  | possible_keys | key                | key_len | ref  | rows    | Extra       |
    +----+-------------+-----------+-------+---------------+--------------------+---------+------+---------+-------------+
    |  1 | SIMPLE      | oms_order | index | NULL          | IND_ORDER_DELIVERY | 9       | NULL | 1139498 | Using index |
    +----+-------------+-----------+-------+---------------+--------------------+---------+------+---------+-------------+
    1 row in set (0.00 sec)
      

  6.   

    没有ORDER则由MYSQL自行处理顺序,而这个顺序则和记录的物理顺序,索引的顺序相关。