• 星空下
    2021-03-09
    老师,面试遇到的一个问题,select count(*) from t; t中有id(主键),name,age,sex4个字段。假设数据10条,对sex添加索引。用explain 查看执行计划发现用了sex索引,为什么不是主键索引呢?主键索引应该更快的

    作者回复: 问题很好,下面是我的理解,供你参考: 1. MySQL Innodb的主键索引是一个B+树,数据存储在叶子节点上,10条数据,就有10个叶子节点。 2. sex索引是辅助索引,也是一个B+树,不同之处在于,叶子节点存储的是主键值,由于sex只有2个可能的值:男和女,因此,这个B+树只有2个叶子节点,比主键索引的B+树小的多 3. 这个表有主键,因此不存在所有字段都为空的记录,所以COUNT(*)只要统计所有主键的值就可以了,不需要回表读取数据 4. SELECT COUNT(*) FROM t,使用sex索引,只需要访问辅助索引的小B+树,而使用主键索引,要访问主键索引的那个大B+树,明细工作量大,这就是为什么,优化器使用辅助索引的原因

    共 9 条评论
    54
  • Gavin
    2021-03-09
    老师,程序员的第一性原理是什么?

    作者回复: 我以为,程序员的第一性原理应该是实际业务需求,技术服务于业务,一切从实际需求出发。

    
    30
  • 青鸟飞鱼
    2021-03-08
    老师,不要太优秀啊,很接地气的专栏。

    作者回复: 感谢鼓励

    
    14
  • 石头
    2021-03-10
    这是入门课吗,后面会讲得深入一些吗

    作者回复: 是从零开始的入门课,随着课程的展开,我会遵循由浅入深,循序渐进的原则进行讲解。后面肯定会不断深入。

    
    10
  • 封志强
    2021-03-08
    老师说的很细,👏👏👏

    作者回复: 谢谢鼓励

    
    8
  • 蓝色梦幻
    2021-03-08
    后面做项目的时候,老师选择哪个语言?

    作者回复: 这个要看是什么场景,比如,web端的应用,我一般是用Java来处理与MySQL的数据交互。主要是Java功能比较强大,我也比较熟。如果是PC端的应用,我比较喜欢用VC++。

    
    6
  • Initiative Thinker
    2021-03-15
    为什么设置goodsname字段的数据类型为varchar会出错呢?

    作者回复: 应该是你没有指定varchar类型的最大长度。MySQL要求指定varchar类型的时候,必须要指定最大长度。否则没法分配存储空间

    
    5
  • 行与修
    2021-03-11
    CREATE TABLE demo.goodSales ( id int PRIMARY KEY AUTO_INCREMENT, goodId int, goodsname text, price int, quantity int, cost int); 销售表有自己的主键,也可以是类guid的唯一标识; 商品表的主键id作为销售表的外键; 此处的商品名称也可以不加,冗余只为前端显示时不用再关联查询。

    作者回复: 如果不需要合并数据,可以用自增字段做主键。加上商品名称,我是赞成的,这样的冗余有好处

    共 2 条评论
    5
  • 时光过客
    2021-05-25
    老师,问一下其他问题,如果使用其他数据库(如hana),这个数据库与mysql差异性有多大,在哪里可以获取到这方面的信息。 或者说,在mysql这里学习的内容,去其他数据库中操作时,差异性大吗?

    作者回复: hana采用了一些优化策略,比如把数据存储在内存中,这样数据库的性能有很大提升,不过都支持标准的SQL语句,这方面与MySQL差别不大。建议通过产品对应的官方网站查询相关的信息

    共 2 条评论
    4
  • zhongsun
    2021-03-09
    navicat可以吗?

    作者回复: navicat也可以连接MySQL。新建连接->选择MySQL->编辑连接参数,端口3306,本机localhost,密码是你自己安装MySQL时候设置的root的密码。参数填写完成,就可以连接了

    
    4