• 老毕
    2019-08-16
    按照对课程的理解,我觉得应该只为use_id字段建立一个窄索引。

    理由如下:

    如果不加思索地套用三星索引,应该这样做:
    1. 有范围谓词,把user_id加到索引中;
    2. 无排序操作,无需添加排序字段到索引中;
    3. 为避免回表,把comment_text添加到索引中。

    这样实际形成宽索引: comment_id + comment_text + user_id

    但是,这样真的划算吗?

    comment_text有可能是长字符串,不但占用较大的索引空间,且有高昂的索引维护成本;如果仅仅建立前缀索引,又无法避免回表操作。

    更重要的是,此索引满足不了长文本的查询需求,左匹配原则限制了它的用途——我们不大可能使用起始字符串去搜索一段评论——全文索引更为适用。

    因此,comment_text不能发挥索引的本来作用。如果仅仅为了避免回表,就将字段一股脑儿塞到索引中,可说是本末倒置了。

    综上,为user_id建立索引,形成comment_id + user_id的窄索引,是应对题中SQL查询的正确方法。
    展开
    
     20
  • 大牛凯
    2019-08-16
    有个问题不太明白,宽索引就是联合索引吗?复合索引又是啥意思?

    作者回复: 宽索引就是联合索引,因为索引列数大于1了,联合索引也就是复合索引,英文composite indexes

     1
     3
  • Coool
    2019-10-25
    下面的0.1%应该换成100%吧。。
    100% x 14% x 54%=8%
    
     2
  • 空知
    2019-08-30
    联合过滤条件那是不是多写了个 0.1%呀?
    
     2
  • 时间的奴隶
    2019-08-24
    通过宽索引来避免回表,指的是覆盖索引吗?按照文中对宽索引的描述,感觉宽索引就是联合索引(复合索引)

    作者回复: 对的 宽索引就是联合索引(复合索引)。避免回表是因为索引覆盖了,所以才会避免回表

    
     1
  • 安静的boy
    2019-08-16
    请问下三星索引第一条中的等值谓词,怎么样才算等值谓词呢?
     1
     1
  • 业余草
    2019-08-16
    (8)SELECT (9)DISTINCT (11)<Top Num> <select list>
    (1)FROM [left_table]
    (3)<join_type> JOIN <right_table>
    (2)ON <join_condition>
    (4)WHERE <where_condition>
    (5)GROUP BY <group_by_list>
    (6)WITH <CUBE | RollUP>
    (7)HAVING <having_condition>
    (10)ORDER BY <order_by_list>
    老师,这个sql执行顺序,是不是不对啊?
    我在 https://www.xttblog.com 看到的,请老师解惑!
    展开
    
     1
  • YiFān.W
    2020-01-14
    那请问老师,如果没有主键。那么针对宽窄索引查询到数据后,回表的情况是否受影响?
     1
    
  • 旅途
    2019-12-27
    老师 使用三星索引会使索引变宽 这样每个页存储的索引数据就会变少 这句话 是怎么来的 能再详细讲一下吗
    
    
  • 书痕
    2019-11-06
    感觉三星索引简直是面向查询新建了个表嘛~

    作者回复: 差不多 可以这么理解

    
    
  • 雪飞鸿
    2019-10-24
    在 MySQL InnoDB 中,系统默认单个索引长度最大为 767 bytes。这里的索引长度指的是索引中所包含字段的大小吗?

    作者回复: 对的

    
    
  • Ryoma
    2019-09-19
    4 个问题:
    0:0.1 % * 14% * 54% = 8% 这个数学实在在没搞懂。
    1:窄索引图中 id user_id,这个 id 字段从哪冒出来的
    2:宽窄索引的定义是从哪来的,感觉联合索引、非联合索引定义反而更清晰
    3:老师的问题可以在下一篇回答么?最近撸下来感觉很多同学都有这个需求,这也是另外一门 MySQL 课程的做法,可以借鉴一下。
    
    
  • wonderq_gk
    2019-08-29
    如何设置宽索引啊???不告诉方法???

    作者回复: 宽索引,窄索引都是相对于建立的索引包括的列数而言的,当索引的列数超过2列时就是宽索引。

     1
    
  • KEEPUP
    2019-08-27
    “如果 up_limit_id < trx_id < low_limit_id,说明该行记录所在的事务 trx_id 在目前 creator_trx_id 这个事务创建的时候,可能还处于活跃的状态,因此我们需要在 trx_ids 集合中进行遍历,如果 trx_id 存在于 trx_ids 集合中,证明这个事务 trx_id 还处于活跃状态,不可见。否则,如果 trx_id 不存在于 trx_ids 集合中,证明事务 trx_id 已经提交了,该行记录可见。”
    不明白为什么还会出现否则这种情况,up_limit_id < trx_id < low_limit_id 的话,trx_id不就一定在trx_ids的集合里边吗?
    
    
  • ABC
    2019-08-16
    有一些开源的系统,包括我们公司的系统,都在使用uuid作为表的主键。。。

    另外我记得MongoDB也是用的类似uuid做的主键
     2
    
  • asdf100
    2019-08-16
    疑问:针对窄索引的定义是1或者2个字段,这个如何区分?1个字段是指主键,2个字段是指除pk键以外的一个字段吗?
    
    
  • asdf100
    2019-08-16
    针对 先 GROUP BY ,再ORDER BY 的场景,虽然索引有顺序,但仍无法保证ORDER BY的顺序和索引的一样的,这个时间,ORDER BY 如何处理,是不是仍需要 sort buffer进行排序?
     1
    
  • 阿锋
    2019-08-16
    这一章有点抽象,例子不是很多,索引片概念不理解,如何设置窄索引,宽索引。容易与之前介绍的索引种类弄混,究竟与之前介绍的索引存在什么关系。
     2
    
  • ahazxc
    2019-08-16
    试用三星索引,可以减少磁盘i/o,避免回表查询。但同时,有利也有弊,三星索引,如果查询列,过滤列字段过多,会导致索引变大,一个索引页能存储的索引变少,所以遍历索引页花的时间就会多,得不偿失

    作者回复: 对的 凡事都有利弊,当我们了解更多的时候,也会了解每种方法的优缺点,选择适合的来使用

    
    
我们在线,来聊聊吧