• MySQL 默认排序是什么


    最近在优化分页查询时,有一个问题:查询不同列,分页出来得数据不一样。先看一下这个现象

    表结构:

    CREATE TABLE `t_attach` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `fname` varchar(100) NOT NULL DEFAULT '',
      `ftype` varchar(50) DEFAULT '',
      `fkey` text NOT NULL,
      `authorId` int(10) DEFAULT NULL,
      `created` int(10) NOT NULL,
      `hash` varchar(255) DEFAULT NULL,
      `web_url` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `fname` (`fname`) USING BTREE,
      KEY `created` (`created`) USING BTREE,
      KEY `web_url` (`web_url`) USING BTREE,
      KEY `authorId` (`authorId`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=323466 DEFAULT CHARSET=utf8;

    这里面,有几个列建立了索引

    看一下查询语句

     SELECT  * FROM  t_attach LIMIT 10,10;    
     SELECT id,fname FROM t_attach   LIMIT 10,10;
     SELECT id FROM  t_attach    LIMIT 10,10

     

     

     好奇怪,居然查询到的数据不是一致的。想了好久,应该是mysql排序的方式不一致导致的。

    接着执行了一下EXPLAIN 分析一下看看

     EXPLAIN SELECT  * FROM  t_attach LIMIT 10,10;    
     EXPLAIN SELECT id,fname FROM t_attach   LIMIT 10,10;
     EXPLAIN SELECT id FROM  t_attach    LIMIT 10,10

     ②

     居然用到的key不一样,类似的情况也可以看下

    MySQL 默认排序真的是按主键来排序的吗

    可以看出,mysql在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。

    因为在不同的查询列的时候,可能会使用到不同的索引条件。

    Mysql在使用不同索引的时候,得到的数据顺序是不一样的。

    这个可能就跟Mysql的索引建立机制,以及索引的使用有关了。

    可以参考这个看看。

    SQL 语句的查询结果的的顺序是由哪些因素决定?

    为了避免这种情况,在以后的项目中,切记要加上order by

     

  • 相关阅读:
    Angularjs 中文版API v1.3.9 阅读
    jquery之ajax
    requirejs中 shim
    reqiurejs学习
    angularjs与require的集成摘抄
    安装go-admin
    多种GitHub加速方式
    git初始化仓库操作
    git cherry-pick
    gc问题定位
  • 原文地址:https://www.cnblogs.com/liran123/p/13084632.html
Copyright © 2020-2023  润新知