• 老毕
    2019-08-29
    ABCD四条语句都会使用索引。

    A: WHERE y=2 AND x>1 AND z=3 -- 使用索引(x,y,z)的x列。

    x是范围列,索引列最多作用于一个范围列,范围列之后的y列和z列无法使用索引。

    B: WHERE y=2 AND x=1 AND z>3 -- 完整使用索引(x,y,z)。

    C: WHERE y=2 AND x=1 AND z=3 -- 完整使用索引(x,y,z)。

    z是范围列,索引可以被使用。

    D: WHERE y>2 AND x=1 AND z=3 -- 使用索引(x,y,z)的x列和y列。

    y是范围列,索引列最多作用于一个范围列,范围列之后的z列无法使用索引。


    感谢老师指正,纠正了我之前的错误理解。
    展开
     2
     13
  • Hanqiu_Tan
    2019-08-28
    首先在数据量比较大的前提下,A中x是范围查询最可能做的是全表扫描利用多块读方式,这样效果很好点。B和C应该利用了联合索引(x,y,z)中所有列。D根据最左原则应该利用了联合索引中的x,y列,执行步骤应该是,通过x,y找到rowid,回表,在通过判断z是否等于3,得到结果
    
     4
  • 一步
    2019-09-01
    利用老师的 hexo 表做了一个实现:
    按照这个顺序 在 `hp_max`, `hp_growth`, `mp_max` 这3个字段上建立联合索引
    上面的 A 情况:
    explain select * from heros where hp_max > 5000 and hp_growth = 181.6 and mp_max = 200;
    是全部扫描,不走索引 type 为 all
    上面的 B 情况:
    explain select * from heros where hp_max = 5000 and hp_growth = 181.6 and mp_max > 200;
    走联合索引, type 为 range
    上面的 C 情况:
    explain select * from heros where hp_max = 5000 and hp_growth = 181.6 and mp_max = 200;
    走联合索引, type 为 ref
    上面的 D 情况:
    explain select * from heros where hp_max = 5000 and hp_growth > 181.6 and mp_max = 200;
    走联合索引, type 为 range
    展开

    作者回复: 分析的不错

     2
     2
  • rike
    2020-01-09
    创建完表后查看表的ddl,发现PRIMARY KEY (`comment_id`) USING BTREE,这里的BTREE是指b树还是b+树?
     1
     1
  • mickey
    2019-08-28
    A -> y
    B -> y,x
    C -> y,x,z
    D -> None
     1
     1
  • 丁丁历险记
    2020-01-11
    为什么不说maraiadb
    
    
  • rike
    2020-01-09
    按照heros表加了联合索引后的执行结果,如果范围查询是联合索引的第一列,就无法走索引了?
    
    
  • 爬行的蜗牛
    2019-12-24
    A. SELECT x, y, z FROM table WHERE y=2 AND x>1 AND z=3 .
    用到联合索引的x 字段; 因为x 是最左边的;

    B. SELECT x, y, z FROM table WHERE y=2 AND x=1 AND z>3
    只是用到联合索引的x,y,z 字段;

    C. SELECT x, y, z FROM table WHERE y=2 AND x=1 AND z=3
    用到联合索引, x,y,z 字段都用到;

    D. SELECT x, y, z FROM table WHERE y>2 AND x=1 AND z=3
    使用到 x,y字段的索引;
    展开
    
    
  • 爬行的蜗牛
    2019-12-24
    B. SELECT x, y, z FROM table WHERE y=2 AND x=1 AND z>3
    只是用到联合索引的x,y 的字段;

    C. SELECT x, y, z FROM table WHERE y=2 AND x=1 AND z=3
    用到联合索引, x,y,z 字段都用到;
    
    
  • 壶中无酒
    2019-12-17
    答题:
    X
    XYZ
    XYZ
    XY
    
    
  • 冲
    2019-11-23
    只有C用了索引,其他的因为条件不是采用=或者in不会进行排序
    
    
  • Coool
    2019-10-25
    以heros表为例,进行查询:
    A:explain select * from heros where hp_max > 5000 and hp_growth = 329 and mp_max = 100; -- All

    B:explain select * from heros where hp_max = 5000 and hp_growth = 329 and mp_max > 100; -- range

    C:explain select * from heros where hp_max = 5000 and hp_growth = 329 and mp_max = 100; -- ref

    D:explain select * from heros where hp_max = 5000 and hp_growth > 329 and mp_max = 100; -- range
    展开
    
    
  • NO.9
    2019-09-07
    A:x
    B:xyz
    C:xyz
    D:xy
    
    
  • niemo
    2019-09-02
    联合索引这里是不是要讲下各种数据库之间的where后条件执行的顺序啊?mysql是从左到右,从上到下,oracle是从右到左,从上到下,对吧?
    
    
  • asdf100
    2019-08-31
    对于读操作,为什么选择myisam比innobd效率要高?是因为锁的粒度吗?

    作者回复: 除了myisam只支持表级锁以外,myisam不是事务安全的,而且不支持外键。你可以理解myisam更简化轻量级

    
    
  • asdf100
    2019-08-31
    Myisam使用的好像是b- 树吧?

    作者回复: 也是使用的B+树

     2
    
  • 渴望飞的哺乳类
    2019-08-28
    思考题:
    A:全表扫描
    B:使用联合索引(x,y,z)
    C:使用联合索引(x,y,z)
    D:使用联合索引(x,y)
    
    
  • 许童童
    2019-08-28
    思考题:
    A.使用联合索引的x部分
    B.使用联合索引的x,y,z部分
    C.使用联合索引的x,y,z部分
    使用联合索引的x,y部分
    
    
  • Demon.Lee
    2019-08-28
    所以,我的问题是: 查询缓存的数据是不是来自缓存池?我理解是的。
     3
    
  • humor
    2019-08-28
    A: x
    B: x,y,z
    C: x,y,z
    D: x,y
     1
    
我们在线,来聊聊吧