我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql 复合索引 误区实践

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql 复合索引 误区实践


背景:很多dba在生产生活中经常会使用到mysql的联合索引,作者在工作中也经常遇到,本文讲解下其中的一个误区,sql语句中联合索引必须在where条件后面按索引字段的先后顺序写吗?下面案例将实际讲解下
环境:os:centos7.4  mysql_version:mysql5.7.21

1、建表t2 创建了复合索引idx_con_update(realname,age)
    CREATE TABLE `t2` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `realname` varchar(255) NOT NULL,
      `age` tinyint(1) NOT NULL DEFAULT '0',
      `createdAt` datetime NOT NULL,
      `updatedAt` datetime NOT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_con_update` (`realname`,`age`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2、插入数据
(root@localhost:mysql.sock) [test]>select * from t2;
+----+----------+-----+---------------------+---------------------+
| id | realname | age | createdAt           | updatedAt           |
+----+----------+-----+---------------------+---------------------+
|  1 | kitten   |  20 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  2 | kitten1  |  21 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  3 | kitten2  |  22 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  4 | kitten2  |  22 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  5 | kitten3  |  23 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  6 | kitten4  |  24 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  7 | kitten5  |  25 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  8 | kitten6  |  26 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
|  9 | kitten7  |  27 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
| 10 | kitten8  |  28 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
| 11 | kitten9  |  29 | 2016-03-02 15:10:00 | 2016-03-08 16:28:00 |
+----+----------+-----+---------------------+---------------------+
11 rows in set (0.00 sec)
3、查看执行计划
    (root@localhost:mysql.sock) [test]>(root@localhost:mysql.sock) [test]>explain     select * from t2 where realname='kitten5' and age=25\G;
    *************************** 1. row ***************************
           id: 1
      select_type: SIMPLE
        table: t2
       partitions: NULL
         type: ref
    possible_keys: idx_con_update
          key: idx_con_update
      key_len: 768
          ref: const,const
         rows: 1
     filtered: 100.00
        Extra: NULL
    1 row in set, 1 warning (0.00 sec)
    
    
    分析执行计划:很明显 查询语句走了复合索引idx_con_update
    把where条件顺序反一下是否还会走idx_con_update索引呢?看下面
    
    (root@localhost:mysql.sock) [test]>explain select * from t2     where  age=25 and realname='kitten5'\G;
    *************************** 1. row ***************************
           id: 1
      select_type: SIMPLE
        table: t2
   partitions: NULL
         type: ref
    possible_keys: idx_con_update
              key: idx_con_update
      key_len: 768
          ref: const,const
         rows: 1
     filtered: 100.00
        Extra: NULL
    1 row in set, 1 warning (0.01 sec)

    分析执行计划:查询条件顺序更换之后 查询依然走索引

总结:经常有同事、朋友咨询我索引的事情、所以大胆使用复合索引、不用担心索引字段的先后顺序

    

   

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql 复合索引 误区实践

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

下载Word文档

猜你喜欢

mysql的联合索引(复合索引)的实现

联合索引 本文中联合索引的定义为(MySQL):ALTER TABLE `table_name` ADD INDEX (`col1`,`col2`,`col3`);联合索引的优点 若多个一条SQL,需要多个用到两个条件SELECT * FR
2022-05-29

PHP与MySQL索引优化的最佳实践和常见误区

导言:在开发Web应用程序时,PHP与MySQL是非常重要的组合。MySQL作为一种关系型数据库管理系统,可以存储和检索大量的数据。然而,随着数据量的增加,数据库查询的性能可能会下降。索引是一种提高查询性能的重要机制。本文将介绍PHP与My
2023-10-21

MySQL中复合索引和覆盖索引的区别详解

目录前言准备复合索引覆盖索引总结前言准备我们先准备一张表和几个字段,方便介绍覆盖索引和复合索引。创建一个user表,表中有id、name、school、age字段。字段名字段类型idintnamevarcharschoolvarcha
MySQL中复合索引和覆盖索引的区别详解
2023-11-23

mysql复合索引如何创建

在MySQL中,可以使用CREATE INDEX语句来创建复合索引。复合索引是基于多个列的索引,可以提高查询性能。创建复合索引的语法如下:CREATE INDEX index_name ON table_name (column1, c
mysql复合索引如何创建
2023-10-28

使用MySQL索引的最佳实践是什么?

数据库索引是一种提高表操作速度的数据结构。可以使用一列或多列创建索引,为快速随机查找和记录访问的高效排序提供基础。使用 MySQL 索引的最佳实践是。如果表对于 CSV 来说非常大,那么使用索引会将记录插入到末尾。索引创建表的一系列行。
2023-10-22

红黑树在MySQL中如何管理复合索引

在MySQL中,红黑树是一种自平衡的二叉搜索树,用于高效地存储和检索数据。然而,MySQL本身并不直接将红黑树用于复合索引的管理。复合索引是由多个列组成的索引,它允许数据库根据多个列的值来快速查找数据。在MySQL中,复合索引的管理是通过
红黑树在MySQL中如何管理复合索引
2024-10-08

MySQL中冗余和重复索引的区别说明

MySQL允许在单个列上创建多个索引,无论是有意还是无意,MySQL需要单独维护这些重复索引,优化器在优化查询时也需要逐个考虑这会影响MySQL的性能 概念阐述 重复索引: 在相同的列上按照相同的顺序创建的相同类型的索引。应该避免创建这样的
2022-05-23

怎么在mysql中实现一个联合索引

这篇文章将为大家详细讲解有关怎么在mysql中实现一个联合索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。联合索引联合索引的定义为(MySQL):ALTER TABLE `table_na
2023-06-14

Go语言与区块链技术结合的探索与实践

Go语言与区块链技术结合的探索与实践随着区块链技术的不断发展,越来越多的开发者开始关注如何利用这一颠覆性技术来构建更加安全、去中心化的应用。而Go语言作为一种高效、可靠的编程语言,在区块链开发中也备受青睐。本文将探讨如何结合Go语言和区块
Go语言与区块链技术结合的探索与实践
2024-03-11

编程热搜

目录