MySQL的最左原则

这篇具有很好参考价值的文章主要介绍了MySQL的最左原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简述

  • MySQL索引的最左原则指的是,当使用多列索引时,MySQL会优先使用索引中最左边的列。如果查询条件中包含了索引的最左列,那么MySQL会使用这个索引来加速查询。
  • 更具体的描述:建立一个索引,对于索引中的字段,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配

二、实际场景

  1. 单一列索引:

    假设有一个表users,其中有一个age列,我们为这个列创建了一个索引idx_age。如果查询条件是WHERE age > 18,那么这个索引就会被用到。如果查询条件是WHERE name = 'John',那么这个索引就不会被用到,因为name列并没有被包含在索引中。

  2. 联合索引:

    假设有一个表users,其中有两个列agename,我们为这两个列创建了一个联合索引idx_age_name。如果查询条件是WHERE age > 18 AND name = 'John',那么这个索引就会被用到,因为查询条件中包含了索引的最左侧列age。如果查询条件是WHERE name = 'John' AND age > 18,那么这个索引就不会被用到,因为查询条件中没有包含索引的最左侧列age

  3. 前缀索引:

    假设有一个表products,其中有一个brand列,我们为这个列创建了一个前缀索引idx_brand_prefix。如果查询条件是WHERE brand LIKE 'A%',那么这个索引就会被用到,因为查询条件中包含了索引的最左侧连续若干列。如果查询条件是WHERE brand LIKE '%A',那么这个索引就不会被用到,因为查询条件中没有包含索引的最左侧列。


三、具体例子

  • 例子1:假设有一个索引idx(a, b, c),其中a是第一列,b是第二列,c是第三列。如果查询条件是WHERE a = 1 AND b = 2,那么MySQL会使用这个索引来加速查询。因为a是索引中最左边的列,它符合最左原则。

    但是,如果查询条件是WHERE b = 2 AND c = 3,那么MySQL不会使用idx(a, b, c)索引,因为它不满足最左原则。在这个情况下,MySQL可能会使用一个名为idx2(b, c)的另一个索引来加速查询。

  • 例子2:a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的(c中有>),如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整文章来源地址https://www.toymoban.com/news/detail-710593.html


四、注意事项

  1. 查询条件的顺序很重要。查询条件中要按照索引的最左列到最右列的顺序出现,才能利用索引进行加速查询。否则,索引就无法被用到。
  2. 单个字符的通配符可以使用索引。比如,查询条件是WHERE name LIKE 'A%',这样可以利用索引进行加速查询。但是,如果通配符出现在字符串的中间或者右侧,比如WHERE name LIKE '%A',那么就无法使用索引了。
  3. 不要在列上进行计算。如果查询条件中含有函数或者表达式,会导致索引失效而进行全表扫描。比如,查询条件是WHERE YEAR(birthday) < 1990,这样无法使用索引进行加速查询。正确的做法是,将函数或者表达式放到查询条件的右侧,比如WHERE birthday < '1990-01-01'
  4. 索引不会包含有NULL值的列。只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。因此在数据库设计时不要让字段的默认值为NULL。
  5. 尽量选择区分度高的列作为索引。区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0。覆盖索引是一个非常有用的工具,能够极大的提高性能。
  6. 最左原则仅适用于多列索引。对于单列索引,因为它本身就是最左的列,所以不需要使用最左原则。

到了这里,关于MySQL的最左原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 创建索引的原则,优化的思路

    MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。 按照 作用字段个数 进行划

    2024年02月08日
    浏览(36)
  • MySQL进阶篇:索引(概述,结构,分类,语法,SQL性能分析,索引使用,设计原则)

    索引(index)是帮助MysQL 高效获取数据的数据结构 ( 有序 )。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 优缺点: MySQL的索引是在存储

    2024年01月20日
    浏览(31)
  • 表索引(索引的设计原则)详解

    目录 前言 一、选择唯一性索引 二、为经常需要排序、分组和联合操作的字段建议索引 三、为经常作为查询条件的字段建立索引 四、限制索引的数目 五、尽量使用数据量少的索引 六、尽量使用前缀来索引 七、删除不再使用或者很少使用的索引         为了使索引的使用

    2024年02月02日
    浏览(24)
  • 索引的创建与设计原则

    1.1索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式,索引可以分为 2 种: 聚族索引和非聚族索引。 按照 作用字段

    2024年02月08日
    浏览(29)
  • 关于对【oracle索引】的理解与简述

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131094864 出自【进步*于辰的博客】 无论 oracle 、 mysql ,亦或者其他数据库,几乎所有企业级项目都会使用 索引 ,因为这能大大提升程序性能。 oracle 索引如何实现

    2024年02月08日
    浏览(26)
  • 第19章:索引的创建与设计原则

    功能逻辑 :普通索引,主键索引,唯一索引,全文索引 物理实现方式 :聚簇索引和非聚簇索引 作用字段个数 :单列索引和联合索引 1. 普通索引 对表中的任何字段都可以创建,没有限制条件。如:student表中的name字段建立一个普通索引,查询记录时根据索引进行查询 2. 唯一

    2024年02月09日
    浏览(26)
  • 【数据库概论】第三章 SQL简述、数据定义和索引

    最早在IBM的关系数据库管理系统原型SystemR上实现,后来美国国家标准局(ANSI)批准SQL作为关系数据库语言的美国标准,同年公布了SQL标准文本。近些年来SQL标准的内容越来越丰富和复杂。目前没有任何一个数据库系统能够支持SQL标准的所有概念和特性,同时不少软件厂商对

    2024年02月05日
    浏览(58)
  • 简述Elasticsearch(ES)是什么 全文搜索概念 (倒排索引 管理文档)

    今天 我们来说说 NoSql 中的 Elasticsearch 大家基本都叫它 ES 官方介绍 它是一个分布式全文搜索引擎 分布式是一个系统架构的概念 而 全文搜索引擎 全文搜索 可以说基本大家天天都在接触 就比如 我们京东购物 想买什么东西 在全文输入框中搜索 它就会在所有物品中 帮你找出需

    2024年01月25日
    浏览(39)
  • 简述MySQL体系结构与MySQL的 安装

    简述MySQL体系结构 安装部署MySQL(使用yum以及通用二进制方式) 1.简述MySQL体系结构 MySQL分为四层体系结构,分别是: 连接层 SQL层 插件式存储引擎层 物理文件层 1.连接层: 由connection pool(连接池)构成 目的:解决资源频繁分配、释放所造成的问题,而连接池的作用相当于一

    2024年02月12日
    浏览(31)
  • MySQL表设计原则

    这里简单整理一些常用的数据库表设计原则以及常用字段的使用范围。 表名、字段名必须使用小写字母或者数字,禁止使用数字开头,禁止使用拼音,并且一般不使用英文缩写。 主键索引名为 pk_字段名 ;唯一索引名为 uk_字段名 ;普通索引名则为 idx_字段名 。 主键设计的话

    2024年02月06日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包