• 金鼎卫生院信息网
  • 您的位置:首页 >> 国际新闻 >> 正文

    Mysql 覆盖索引及其使用注意事项

    发表时间:2019-09-08 信息来源:www.giaoxuphuoc.com 浏览次数:1488

     

    No:Wooola,10年的Java软件开发和架构设计经验,专注于Java,Golang,微服务架构,致力于每天分享原创文章,快乐编码和开源技术。

    作者 | 奔跑吧CTO 微信公众号 首发

    五, 覆盖索引优化示例

    有这样一张桌子:

    CREATE TABLE`user_group`(`id` int(11)NOT NULL auto_increment,`uid` int(11)NOT NULL,`group_id` int(11)NOT NULL,PRIMARY KEY(`id`),KEY`uid`( `uid`),KEY`group_id`(`group_id`))ENGINE=InnoDB AUTO_INCREMENT=DEFAULT CHARSET=utf8SELECT SQL_NO_CACHE uid FROM user_group WHERE group_id=SQL。

    Explain的结果是:

    + ---- + ------------- + ------------ + ------ + ---------- ----- + ---------- + --------- + ------- + ------ + ------- + | id | select_type |表|类型| possible_keys |关键| key_len | ref |行|额外的| + ---- + ------------- + --------- --- + ------ + ---------- ----- + ---------- + --------- + - ----- +++ ------- + | 1 |简单| user_group | ref | group_id | group_id | 4 | const | 5544 | |索引查询):ALTER TABLE user_group ADD INDEX group_id_uid(group_id,uid);

    然后,令人难以置信的事情发生了.这个SQL查询的性能已经大大提高,它已经可以运行大约0.00s。优化的SQL结合实际业务需求也从2.2秒降至0.05秒。

    再说一遍:

    + ---- + ------------- + ------------ + ------ + ---------- ------------- + -------------- + --------- + ------- + --- --- + ------------- + | id | select_type |表|类型| possible_keys |关键| key_len | ref |行|额外的| + ---- + ----- -------- + ------------ + ------ + ---------- ----------- - + -------------- + --------- + ------- + --- --- + ------- ------ + | 1 |简单| user_group | ref | group_id,group_id_uid | group_id_uid | 4 | const | 5378 |使用索引| + ---- + ------------- + ------------ + ------ + ---------- ------------- + ----- --------- + --------- + ------- + --- --- + ------------- +

    您可以看到使用了叠加索引。 MySQL只需要通过索引返回查询所需的数据。检查索引后,不是查询数据,而是大大优化了SQL执行性能。所以通常使用覆盖索引也是Mysql中更重要的部分。

    ——

  • 热门标签

  • 日期归档

  • 友情链接:

    金鼎卫生院信息网 版权所有© www.giaoxuphuoc.com 技术支持:金鼎卫生院信息网 | 网站地图