• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Innodb表select查询顺序

    今天知数堂一个学生反馈说在优化课中老师讲Innodb是以主键排序存储,读取的时间以主键为顺序读取,但发现个例外,如下:

    CREATE TABLE zst_t1 ( 
    
    uid int(10) NOT NULL AUTO_INCREMENT, 
    
    id int(11) NOT NULL, 
    
    PRIMARY KEY ( uid ), 
    
    KEY idx_id ( id ) 
    
    ) ENGINE=InnoDB;'
    
    

    写入数据:

    INSERT INTO zst_t1 VALUES (1,1),(12,1),(22,1),(23,1),(33,1),(2,2),(3,2),(10,2),(11,2),(4,4),(13,4),(14,4); 
    
    

    执行查询:

    select * from zst_t1;

    为什么这个顺序是乱的,不按顺序排列呢?难道Innodb表并不是全按主键存储?

    使用innodb_ruby这个工具查看一下存储结构什么样

    看样子存储还是按主键排序存储的。没毛病。

    再来看一下该表的索引:

    看到这里应该明白了怎么会事了吧,原来这个查询是走的索引覆盖,没有在进行回表读取原数据。另外,也在此说明,Innodb二索索引包含了主键存储。

    来继续证明一下:

    看到using index 吧,表示这个查询利用索引查询出来结果,不用读取原表。

    那么我们给造一个通过主键读取数据操作:

    select * from zst_t1 use index(primary);

    select * from zst_t1 use index(primary);  #确认一下。

    总结:

    这个其实就是一个索引包含的查询案例。 如果静下来思考一下,也许很快就明白了。也不用这样去查问题。

    技术在于折腾,多搞搞就明白了:)。

    您可能感兴趣的文章:
    • 可以改善mysql性能的InnoDB配置参数
    • MySQL Innodb表导致死锁日志情况分析与归纳
    • mysql更改引擎(InnoDB,MyISAM)的方法
    • MySQL不支持InnoDB的解决方法
    • Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 的问题
    • 浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析
    • Xtrabackup使用指南 InnoDB数据备份工具
    • MYSQL无法启动提示: Default storage engine (InnoDB) is not available的解决方法
    • MySQL数据库INNODB表损坏修复处理过程分享
    上一篇:浅谈MySQL数据库的备份与恢复
    下一篇:centos 6下安装innodb_ruby
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Innodb表select查询顺序 Innodb,表,select,查询,顺序,