广告
返回顶部
首页 > 资讯 > 数据库 >Mysql 复合索引 误区实践
  • 445
分享到

Mysql 复合索引 误区实践

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

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


背景:很多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)

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

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

    

   
您可能感兴趣的文档:

--结束END--

本文标题: Mysql 复合索引 误区实践

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

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

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

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

下载Word文档
猜你喜欢
  • Mysql 复合索引 误区实践
    背景:很多dba在生产生活中经常会使用到mysql的联合索引,作者在工作中也经常遇到,本文讲解下其中的一个误区,sql语句中联合索引必须在where条件后面按索引字段的先后顺序写吗?下面案例将实...
    99+
    2022-10-18
  • mysql的联合索引(复合索引)的实现
    联合索引 本文中联合索引的定义为(MySQL): ALTER TABLE `table_name` ADD INDEX (`col1`,`col2`,`col3`); 联合索引的优点 若多个一条SQL,需要多个...
    99+
    2022-05-29
    mysql 联合索引 mysql 复合索引
  • PHP与MySQL索引优化的最佳实践和常见误区
    导言:在开发Web应用程序时,PHP与MySQL是非常重要的组合。MySQL作为一种关系型数据库管理系统,可以存储和检索大量的数据。然而,随着数据量的增加,数据库查询的性能可能会下降。索引是一种提高查询性能的重要机制。本文将介绍PHP与My...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • MySQL中复合索引和覆盖索引的区别详解
    目录前言准备复合索引覆盖索引总结前言准备 我们先准备一张表和几个字段,方便介绍覆盖索引和复合索引。 创建一个user表,表中有id、name、school、age字段。 字段名字段类型idintnamevarcharsc...
    99+
    2023-11-23
    MySQL 复合索引 MySQL 覆盖索引
  • MySQL单列索引和组合索引的区别
    这篇文章主要讲解了“MySQL单列索引和组合索引的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL单列索引和组合索引的区别”吧!  MySQL单...
    99+
    2022-10-18
  • mysql联合索引和普通索引的区别
            MySQL中,联合索引和普通索引都是用于加速查询的索引类型。它们之间的区别在于索引的列数和列的顺序。         普通索引只对单个列进行索引,而联合索引则同时对多个列进行索引,这些列可以按照特定的顺序组合在一起。例如,可...
    99+
    2023-09-07
    mysql 数据库 java
  • MySQL的复合索引总结
    目录1.背景2.认识复合索引3.最左匹配原则4.字段顺序的影响5.单字段是否可以触发索引?7.复合索引可以替代单一索引吗?1.背景 最近频繁出现慢SQL导致系统性能...
    99+
    2022-11-12
  • mysql复合索引如何创建
    在MySQL中,可以使用CREATE INDEX语句来创建复合索引。复合索引是基于多个列的索引,可以提高查询性能。 创建复合索引的语...
    99+
    2023-10-28
    mysql
  • MySQL 索引优化实践(单表)
    目录 一、前言二、表数据准备三、常见业务无索引查询耗时测试3.1、通过订单ID / 订单编号 查询指定订单3.2、查询订单列表 四、订单常见业务索引优化实践4.1、通过唯一索引和普通索引...
    99+
    2023-10-25
    mysql 数据库
  • Mysql的复合索引如何生效
    目录背景认识复合索引最左匹配原则字段顺序的影响复合索引可以替代单一索引吗?小结背景 最近频繁出现慢SQL导致系统性能问题,于是决定针对索引进行一些优化。一些表结构本身已经有了不少索...
    99+
    2022-11-12
  • MySQL中的组合索引与单列索引的区别有哪些
    本篇内容介绍了“MySQL中的组合索引与单列索引的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • Mysql中复合索引使用规则有哪些
    这篇文章主要介绍了Mysql中复合索引使用规则有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 联合索引验证:从左向右发挥作用索引:(...
    99+
    2022-10-18
  • mysql中怎么实现重复索引与冗余索引
    这篇文章将为大家详细讲解有关mysql中怎么实现重复索引与冗余索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。重复索引:表示一个列或者顺序相同的几个列上建...
    99+
    2022-10-18
  • 使用MySQL索引的最佳实践是什么?
    数据库索引是一种提高表操作速度的数据结构。可以使用一列或多列创建索引,为快速随机查找和记录访问的高效排序提供基础。 使用 MySQL 索引的最佳实践是。 如果表对于 CSV 来说非常大,那么使用索引会将记录插入到末尾。 索引创建表的一系列...
    99+
    2023-10-22
  • MySQL中冗余和重复索引的区别说明
    MySQL允许在单个列上创建多个索引,无论是有意还是无意,MySQL需要单独维护这些重复索引,优化器在优化查询时也需要逐个考虑这会影响MySQL的性能 概念阐述 重复索引: 在相同的列上按照相同的顺序创建的相同类型的...
    99+
    2022-05-23
    MySQL 冗余 重复索引
  • mysql中冗余和重复索引的区别及作用
    下面讲讲关于mysql中冗余和重复索引的区别及作用,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完mysql中冗余和重复索引的区别及作用这篇文章你一定会有所受益。mysql允许在...
    99+
    2022-10-18
  • 怎么在mysql中实现一个联合索引
    这篇文章将为大家详细讲解有关怎么在mysql中实现一个联合索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。联合索引联合索引的定义为(MySQL):ALTER TABLE ...
    99+
    2023-06-14
  • 有关于极速赛车源码搭建mysql复合索引
    复合索引原则:极速赛车源码搭建 最左前缀原则:企 娥:217 1793 408 index(a,b,c)  1、每次查询必须有a,如ab,ac,abc,如果没有a...
    99+
    2022-10-18
  • MySQL创建联合索引报key长度超3072 bytes的[42000][1071]错误
    问题时这样的,我在建表时加了联合索引结果报key长度超过3072个字节了,如下图。 [42000][1071] Specified key was too long; max key length is 3072 bytes 先说解决方案...
    99+
    2023-09-01
    3072 bytes key too long InnoDB 767 bytes MySQL
  • 如何解决MySQL报错:错误的索引文件,尝试修复
    解决MySQL报错“错误的索引文件,尝试修复”的步骤如下:1. 首先,停止MySQL服务。可以使用命令行输入以下命令来停止MySQL...
    99+
    2023-10-12
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作