广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中覆盖索引怎么用
  • 128
分享到

MySQL中覆盖索引怎么用

2024-04-02 19:04:59 128人浏览 独家记忆
摘要

这篇文章主要为大家展示了“Mysql中覆盖索引怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中覆盖索引怎么用”这篇文章吧。查看测试表结构:mys

这篇文章主要为大家展示了“Mysql中覆盖索引怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中覆盖索引怎么用”这篇文章吧。

查看测试表结构:

mysql> show create table im_message \G
*************************** 1. row ***************************
       Table: im_message
Create Table: CREATE TABLE `im_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `from_id` varchar(40) COLLATE utf8_bin NOT NULL,
  `from_type` tinyint(1) NOT NULL DEFAULT '0',
  `to_id` varchar(40) COLLATE utf8_bin NOT NULL,
  `to_type` tinyint(1) NOT NULL DEFAULT '0',
  `content` varchar(2048) COLLATE utf8_bin DEFAULT '',
  `create_date` bigint(20) NOT NULL,
  `update_date` bigint(20) NOT NULL,
  `message_id` varchar(40) COLLATE utf8_bin NOT NULL,
  `is_sync` tinyint(1) DEFAULT '0' COMMENT '是否同步   0 未同步    1  已同步',
  `is_read` tinyint(1) DEFAULT '0' COMMENT '是否已读   0 未读    1  已读',
  `is_withdraw` tinyint(1) DEFAULT '0' COMMENT '是否撤回  0 未撤  1  已撤',
  `is_lastest` tinyint(1) DEFAULT '0' COMMENT '是否是最新回话消息 0 不是 1是',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uidx_message_id` (`message_id`),
  KEY `idx_date` (`create_date`),
  KEY `idx_from_id` (`from_id`),
  KEY `idx_to_id` (`to_id`),
  KEY `idx_is_sync` (`is_sync`),
  KEY `idx_update_date` (`update_date`),
  KEY `idx_fid_tid` (`from_id`,`to_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13264365 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC
1 row in set (0.00 sec)

查看SQL执行效果:

select max(id) as "id" from im_message WHERE from_id='bd29879279c44672a2fdffcb8428b4d1' or to_id='bd29879279c44672a2fdffcb8428b4d1' group by from_id, to_id;
|  8547247 |
|  7152294 |
|  6897129 |
| 12874034 |
| 10011290 |
|  8027198 |
|  7852741 |
|  9960496 |
|  6059399 |
| 10860981 |
|  9963172 |
| 13253445 |
+----------+
27827 rows in set (0.91 sec)

查看执行计划:

mysql> explain select max(id) as "id" from im_message WHERE from_id='bd29879279c44672a2fdffcb8428b4d1' or to_id='bd29879279c44672a2fdffcb8428b4d1' group by from_id, to_id;

+----+-------------+------------+------------+-------------+-----------------------------------+-----------------------+---------+------+--------+----------+---------------------------------------------------------------------------------------+

| id | select_type | table      | partitions | type        | possible_keys                     | key                   | key_len | ref  | rows   | filtered | Extra                                                                                 |

+----+-------------+------------+------------+-------------+-----------------------------------+-----------------------+---------+------+--------+----------+---------------------------------------------------------------------------------------+

|  1 | SIMPLE      | im_message | NULL       | index_merge | idx_from_id,idx_to_id,idx_fid_tid | idx_fid_tid,idx_to_id | 122,122 | NULL | 168680 |   100.00 | Using sort_uNIOn(idx_fid_tid,idx_to_id); Using where; Using temporary; Using filesort |

+----+-------------+------------+------------+-------------+-----------------------------------+-----------------------+---------+------+--------+----------+---------------------------------------------------------------------------------------+

1 row in set, 1 warning (0.00 sec)

创建覆盖索引:

mysql> alter table im_message add index idx_from_id_id(from_id,id);
Query OK, 0 rows affected (1 min 1.94 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table im_message add index idx_to_id_id(to_id,id);
Query OK, 0 rows affected (1 min 9.79 sec)
Records: 0  Duplicates: 0  Warnings: 0

重新查看SQL执行效果:

select max(id) as "id" from im_message WHERE from_id='bd29879279c44672a2fdffcb8428b4d1' or to_id='bd29879279c44672a2fdffcb8428b4d1' group by from_id, to_id;
|  8547247 |
|  7152294 |
|  6897129 |
| 12874034 |
| 10011290 |
|  8027198 |
|  7852741 |
|  9960496 |
|  6059399 |
| 10860981 |
|  9963172 |
| 13253445 |
+----------+
27827 rows in set (0.63 sec)

查看执行计划:

mysql> explain select max(id) as "id" from im_message WHERE from_id='bd29879279c44672a2fdffcb8428b4d1' or to_id='bd29879279c44672a2fdffcb8428b4d1' group by from_id, to_id;
+----+-------------+------------+------------+-------------+---------------------------------------------------------------+-----------------------------+---------+------+--------+----------+----------------------------------------------------------------------------------------+
| id | select_type | table      | partitions | type        | possible_keys                                                 | key                         | key_len | ref  | rows   | filtered | Extra                                                                                  |
+----+-------------+------------+------------+-------------+---------------------------------------------------------------+-----------------------------+---------+------+--------+----------+----------------------------------------------------------------------------------------+
|  1 | SIMPLE      | im_message | NULL       | index_merge | idx_from_id,idx_to_id,idx_fid_tid,idx_from_id_id,idx_to_id_id | idx_from_id_id,idx_to_id_id | 122,122 | NULL | 162106 |   100.00 | Using union(idx_from_id_id,idx_to_id_id); Using where; Using temporary; Using filesort |
+----+-------------+------------+------------+-------------+---------------------------------------------------------------+-----------------------------+---------+------+--------+----------+----------------------------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

发现优化器选择了新建的两个覆盖索引。 

创建覆盖索引之后,利用索引的有序性, select max(id)可以快速的取到最大id。

以上是“MySQL中覆盖索引怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中覆盖索引怎么用

本文链接: https://www.lsjlt.com/news/62727.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中覆盖索引怎么用
    这篇文章主要为大家展示了“MySQL中覆盖索引怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中覆盖索引怎么用”这篇文章吧。查看测试表结构:mys...
    99+
    2022-10-18
  • mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用
    这篇文章主要介绍了mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。聚集索引(Clustered Index)聚集索引就是...
    99+
    2023-06-29
  • MySQL 覆盖索引的优点
    一个通常的建议是为WHERE条件创建索引,但这其实是片面的。索引应当为全部查询设计,而不仅仅是WHERE条件。索引确实能有效地查找数据行,但MySQL也能够使用索引获取列数据,这样根本不需要去读取一行...
    99+
    2022-05-30
    MySQL 覆盖索引 MySQL 覆盖索引优点
  • mysql 14 覆盖索引+回表
    覆盖索引概念:     MySQL可以利用索引返回select列表中的字段值(就是索引值)。而不必根据主键再次读取聚簇索引数据文件查到数据,也就是平时所说的不需要回表操作。覆盖索引其实是索引覆盖的意思,索引字段就已经囊括selec...
    99+
    2020-11-10
    mysql 14 覆盖索引+回表 数据库入门 数据库基础教程 数据库 mysql
  • Mysql索引覆盖的实现
    目录1.什么是覆盖索引2.覆盖索引为什么快3.SQL优化场景(1)无where条件(2)where条件区分度低(3)查询仅选择主键4.总结与建议1.什么是覆盖索引 通常情况下,我们创建索引的时候只关注...
    99+
    2023-03-03
    Mysql索引覆盖 mysql覆盖索引
  • MySQL回表,覆盖索引,索引下推
    目录回表覆盖索引索引下推无索引下推: 查看索引下推的状态有索引下推: 开启索引下推回表 在研究mysql二级索引的时候,发现Mysql回表这个操作,往下研究了一下 字面意思,找到索引...
    99+
    2022-11-13
  • MySQL 回表,覆盖索引,索引下推
    目录回表覆盖索引索引下推无索引下推: 查看索引下推的状态有索引下推: 开启索引下推回表 在研究mysql二级索引的时候,发现Mysql回表这个操作,往下研究了一下 字面意思,找到索引,回到表中找数据 解释一下就是: 先通...
    99+
    2022-07-11
    MySQL回表 MySQL覆盖索引 MySQL索引下推
  • 详解MySQL覆盖索引、索引下推
    目录 1.覆盖索引 1.1.概述 1.2.聚集索引、非聚集索引 1.3.回表查询 1.4.覆盖索引 2.索引下推 1.覆盖索引 1.1.概述 覆盖索引,是为了避免“回表查询”,从而降低查询耗时的一种使用索引的方法,所以要聊覆盖索引首先我...
    99+
    2023-09-10
    数据库 java 开发语言
  • mysql索引(覆盖索引,联合索引,索引下推)
    目录什么是索引?索引的实现方式innodb的索引模型索引维护覆盖索引联合索引索引下推什么是索引? 当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过...
    99+
    2022-08-25
  • mysql覆盖索引是什么意思
    这篇文章主要介绍mysql覆盖索引是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!查询语句中所需的列在索引中,这样查询结果就可以在索引的数据结构中找到。由于覆盖索引可以减少树木的搜索次数,显著提高查询性能,因...
    99+
    2023-06-25
  • mysql索引覆盖实例分析
    本文实例讲述了mysql索引覆盖。分享给大家供大家参考,具体如下: 索引覆盖 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据。这种查询速度非常快,称为“索引覆盖”。...
    99+
    2022-10-18
  • Mysql索引覆盖如何实现
    这篇“Mysql索引覆盖如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql索引覆盖如何实现”文章吧。1.什么是...
    99+
    2023-07-05
  • mysql覆盖索引的优点是什么
    这篇文章主要介绍了mysql覆盖索引的优点是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、优点说明(1)索引项通常比记录小,因此MySQL访问数据少。(2)索引都是按...
    99+
    2023-06-15
  • 怎么进行mysql索引覆盖扫描优化
    本篇文章为大家展示了怎么进行mysql索引覆盖扫描优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。覆盖扫描即直接在索引中扫描出结果返回给客户端,不需要根据索引再去...
    99+
    2022-10-19
  • mysql中使用覆盖索引需要注意什么
    这篇文章主要介绍mysql中使用覆盖索引需要注意什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、使用注意(1)覆盖索引不适用于所有索引类型,索引必须存储列值。(2)Hash和full-text索引没有存储值,所...
    99+
    2023-06-15
  • Mysql覆盖索引的示例分析
    小编给大家分享一下Mysql覆盖索引的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概念如果索引包含所有满足查询需要的数...
    99+
    2022-10-18
  • MySQL SQL优化 - 覆盖索引(covering index)
    CREATE TABLE `user_group` (   `id` int(11) NOT NULL auto_increment,   `uid` int(11) NOT NULL,...
    99+
    2022-10-18
  • mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
    目录聚集索引(Clustered Index)辅助索引(Secondary Index)覆盖索引(Covering index)联合索引《MySQL技术内幕 InnoDB存储引擎》学...
    99+
    2022-11-13
  • MySQL中复合索引和覆盖索引的区别详解
    目录前言准备复合索引覆盖索引总结前言准备 我们先准备一张表和几个字段,方便介绍覆盖索引和复合索引。 创建一个user表,表中有id、name、school、age字段。 字段名字段类型idintnamevarcharsc...
    99+
    2023-11-23
    MySQL 复合索引 MySQL 覆盖索引
  • MySQL的覆盖索引与回表是怎样的
    今天就跟大家聊聊有关MySQL的覆盖索引与回表是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。两大类索引使用的存储引擎:MySQL5.7 In...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作