首页
学习
活动
专区
工具
TVP
发布

MySQL索引设计原则

MySQL索引的设计原则索引设计原则一: 针对sql语句中的where,order by,group by条件设计索引。...并且注意where,order by,group by后面跟的字段的顺序,是不是某个联合索引的最左侧字段开始的部分字段 索引设计原则二: 需要考虑字段基数的问题,一般建立索引尽量使用那些基数较大的字段,...索引设计原则三 尽量对那些字段类型较小的字段来设计索引。...对于前缀索引,仅仅包含部分字符到索引树中,where查询是可以使用的,但是order by和group by就用不上了 索引设计原则四 设计索引需要考虑到数据插入更新时索引树也会进而更新,以及主键一定要是自增的...索引字段的基数 索引字段值尽量不要过于庞大,可以考虑前缀索引 索引数量不要过多

18520

MySQL查询索引原则

文章目录 等值匹配原则 最左前缀匹配原则 范围查找规则 等值匹配+范围查找 Order By + limit 优化 分组查询优化 总结 MySQL 是如何帮我们维护非主键索引的 等值匹配原则 我们现在已经知道了如果是...【主键索引】,在插入数据的时候是根据主键的顺序依次往后排列的,一个数据页不够就会分裂到另外一个数据页,然后再通过索引页来维护数据页。...参考 数据页之间是通过双向链表来维护的,索引页如果过多就会往上分裂(就像上面这张图),以此类推,这样就形成了由组件组成的 B+ 树结构,即【聚簇索引】 但是问题是我们不仅建立了主键索引,同时也建立了非主键索引...,那这时候非主键索引是如何维护的呢?...因为对于主键索引是不可能重复的,所

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL设计索引原则

更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此, MySQL也可以在内存中容纳更多的值。这增加 了找到行而不用读取索引中较多块的可能性。 (当然,应该利用一些常识。...如仅用列值的第一个字符进行索引是不可能有多大好处的 ,因为这个索引中不会有许多不 同的值。) 4. 利用最左前缀。 在创建 一个 n 列的索引时,实际是创建了 MySQL 可利用的 n 个索引。...多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。这样的列 集 称为最左前缀。(这与索引一个列的前缀不同,索引一个列的前缀是利用该的前 n 个 字符作为索引值。) 5....此外, MySQL 在生成一个执行计划时,要考虑各个索引,这也要费时间。创建多余的 索引给查询优化带来了更多的工作。索引太多,也可能会使 MySQL 选择不到所要使用的最好索引。...只保持所需的索引有利于查询优化。如果想给已索引的表增加索引,应该考虑所要增加的索引是否是现有多列索引的最左 索引。如果是,则就不要费力去增加这个索引了,因为已经有了。 6.

70330

mysql创建索引原则

mysql中使用索引原则有以下几点: 1、 对于查询频率高的字段创建索引; 2、 对排序、分组、联合查询频率高的字段创建索引; 3、 索引的数目不宜太多 原因:a、每创建一个索引都会占用相应的物理控件...创建多列索引,需要遵循BTree类型, 即第一列使用时,才启用索引。...在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。...唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。...8、删除不再使用或者很少使用的索引. 表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响

2.4K10

MySQL理解索引、添加索引原则

索引用于快速找出在某个列中有一特定值的行。不使用索引MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销。...MySQL使用B树构造索引的情况下,是由叶子指向具体的页和记录的。并且一个叶子有一个指针指向下一个叶子。...=则不行 原则    1,单表数据太少,索引反而会影响速度;更新非常频繁的数据不适宜建索引    2,where后的条件,order by ,group by 等这样过滤时,后面的字段最好加上索引。...所以,大多数情况下,有AB索引了,就可以不用在去建一个A索引了 详解: 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。...索引原则 1.索引越少越好 原因:主要在修改数据时,第个索引都要进行更新,降低写速度。 2.最窄的字段放在键的左边 3.避免file sort排序,临时表和表扫描.

1.6K31

MySQL索引需要的原则

因此,为这样的字段建立索引,可以提高整个表的查询速度。 4.限制索引的数目 索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。...8.最左前缀匹配原则,非常重要的原则。...mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序的索引...比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式 10.尽量选择区分度高的列作为索引。...比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可 注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。

1.6K20

B+树|MYSQL索引使用原则

MySQL 中,主要有四种类型的索引,分别为: B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM) 可能对于没有了解过索引的猿友这样看这篇文章十分吃力,这类猿友有必要先对Mysql索引有个大体的了解,可以看看小宝鸽另外一篇文章...: 数据库查询优化——Mysql索引。...),且链表中的关键字恰好是有序的; 2.不可能在非叶子结点命中; 3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 4.更适合文件索引系统; 三、建索引的几大原则...1.最左前缀匹配原则,非常重要的原则mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4

37520

MySQL索引篇,索引的优缺点,分类及设计原则

索引在数据库中的作用是快速找出某个列中一个特定值的行,不使用索引的话,MySQL必须从第一条记录遍历到相关行,表越大,花费的时间越多,但是如果有索引,就能快速的到达某个位置去搜索数据文件,索引对于优化数据库查询速度有着不可替代的作用...,本文主要给大家讲解一下MySQL数据库中,索引的优缺点,分类以及设计原则。...2.唯一索引(Unique):索引列值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值。...3.单列索引:只包含一个列的索引,一个表中可以有多个。 4.组合索引:包含多个列的索引,查询条件包含这些列的最左边的字段的时候,索引就会被引用,遵循最左缀原则。...创建空间索引的列必须声明为非空值(NOT NULL),仅支持MyISAM存储引擎。 ? 索引的设计原则 1.不是越多越好。 2.常更新的表越少越好。 3.数据量小的表最好不要建立索引

1.9K20

如何理解 MySQL 索引最左匹配原则

不胜感激; 言归正传,回到今天要说的 MySQL 索引最左匹配原则问题; 测试表结构,有三个字段,分别是 id,name,cid CREATE TABLE `stu` ( `id` int(11)...疑问是:SQL 查询用到索引的条件是必须要遵守最左前缀原则,为什么上面两个查询还能用到索引?...要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个复合索引的一部分,MySQL 都可能会采用 Index 类型的方式扫描。...所以通常情况下,直接使用第二个 cid 字段进行条件判断是用不到索引的,当然,可能会出现上面的使用 index 类型的索引。这就是所谓的 MySQL 为什么要强调最左前缀原则的原因。...这也就是 MySQL 索引规则中要求复合索引要想使用第二个索引,必须先使用第一个索引的原因。(而且第一个索引必须是等值匹配)。

3.5K40

mysql索引左侧原则,你真的了解吗?

前言 写这篇文章源自一位杠精同事提了个问题,左侧原则跟where条件顺序有无关系?我想了想,好像是有关系的!...预习执行计划 实践 咱们先申明前置条件,创建表如下: 创建复合索引如下注意哦,索引使用的BTree: 我们先来一个提问,看如下两条sql,我们花5秒时间思考下,会走索引吗?...我们列举以上五条sql来验证,查询结果如下: 从上图很明显可以看出,where条件的顺序完全不影响索引的执行,但是很明显上面5条sql所有查询条件都是包含在复合索引内,那要是有查询条件不在符合索引内又是什么结果呢...这里发现不一样了,我们的复合索引顺序是name,code,createTime. 当出现非索引字段的查询条件时,只有包含了name的查询条件走了索引.这是为什么呢?...原来是因为我们用了B+树索引数据结构,它是按照从左到右的顺序建立索引,同时mysql查询优化器会优化sql语句,不管where条件顺序如何变化,都会按照索引左侧原则去优化(注意咯是按照索引的左侧,不是where

1.2K10

3.联合索引、覆盖索引及最左匹配原则|MySQL索引学习

导语 在数据检索的过程中,经常会有多个列的匹配需求,今天介绍下联合索引的使用以及最左匹配原则的案例。...最左匹配原则作用在联合索引中,假如表中有一个联合索引(tcol01,tcol02,tcol03),只有当SQL使用到tcol01、tcol02索引的前提下,tcol03的索引才会被使用;同理只有tcol01...步骤 使用 mysql_random_data_load 创建测试数据 建库和建表 CREATE DATABASE IF NOT EXISTS test; CREATE TABLE `test`..../mysql_random_data_load test t1 1000000 --user=root --password=GreatSQL --config-file=/data/GreatSQL/...如下图: image.png 索引最左原则案例 情况1:三个索引都能使用上 实验1:仅有where子句 # 三个条件都使用上,优化器可以自己调整顺序满足索引要求 [root@GreatSQL][test

1.5K10

MySQL中的联合索引、覆盖索引及最左匹配原则

叶老师的GreatSQL社区的这篇文章《3.联合索引、覆盖索引及最左匹配原则|MySQL索引学习》,不仅适用于GreatSQL、MySQL,从原理层,对Oracle等数据库同样是通用的。...在数据检索的过程中,经常会有多个列的匹配需求,接下来给出一些联合索引的使用以及最左匹配原则的案例。...最左匹配原则作用在联合索引中,假如表中有一个联合索引(tcol01, tcol02, tcol03),只有当SQL使用到tcol01、tcol02索引的前提下,tcol03的索引才会被使用,同理只有tcol01...使用mysql_random_data_load创建测试数据 建库和建表, CREATE DATABASE IF NOT EXISTS test; CREATE TABLE `test`....索引最左原则案例 情况1,三个索引都能使用上 实验1,仅有where子句, # 三个条件都使用上,优化器可以自己调整顺序满足索引要求 [root@GreatSQL][test]>explain SELECT

3.9K20

MySQL索引最左匹配原则及优化原理

因为可以支持最左前缀,所以当已经有了(a,b)这个联合索引后,一般就不需要单独在a上建立索引了。 原则 如果调整顺序,可少维护一个索引,那么这顺序优先考虑。...这时要考虑原则就是空间 比如市民表,name字段比age字段大 ,建议创建一个(name,age)的联合索引和一个(age)的单字段索引 3 索引优化 MySQL的优化主要分为 结构优化(Scheme...联合索引(又名复合索引MySQL中的索引可以以一定顺序引用多列,这种索引叫做联合索引,是个有序元组。...可以看到这个查询用到了索引全部三个列。因此在MySQL中要谨慎地区分多值匹配和范围匹配,否则会对MySQL的行为产生困惑。 ?...MySQL5.6前,只能从ID3开始个个回表,到主键索引上找数据行,再对比字段值。

2.4K10

mysql索引优点及几大原则

索引的优点:   最常见的B-Tree索引,按照顺序存储数据,所以MYSQL可以用来做order by和group by操作。因为数据是有序的,所以B-Tree也就会将相关的列值存储在一起。...mysql索引的几大原则 1.选择唯一性索引   唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。...因此,为这样的字段建立索引,可以提高整个表的查询速度。 4.限制索引的数目   索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。...7.最左前缀匹配原则   当对多个列同时索引时,MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配 聚簇索引(Clustered Indexes)   聚簇索引并不是一种单独的索引类型...除聚簇索引之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes)。

90400

深入理解MySQL索引设计和优化原则

删除索引命令:DROP INDEX index_name ON table_name; 设计原则 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引;溪源给大家整理了以下基本原则...,值的区分度较高,可以考虑作为索引列; 而对于性别列而言:即男,女,未知;数据量基本上没有很大差别,便不适合作为索引列; 短索引原则: 对于长字符串字段列设置索引,最好遵循短索引原则即指定前缀长度,...优化原则 上面说完索引的设计原则,那么我们下面探讨一下索引的优化原则吧!...,因为底层MySQL提供语句优化器,优先使用索引。...周六时光整理此文不易,若大家有所学到,请积极点赞、关注、转发ha~ 参考资料: MySQL索引优化原则

1.5K21

MySQL 为什么要使用索引索引创建的原则有哪些?

为什么创建索引 因为索引在一定程度上,提高了数据库查询速度 在MySQL中有两种数据访问方式:顺序访问和索引访问。...哪些情况下需要创建索引 选择唯一性索引:唯一性索引的值是唯一的,可以更快速的通过索引来确定某条记录 为经常需要排序、分组和联合操作的字段建立索引 经常作为查询条件的字段建立索引 尽量使用数据量少的索引,...如果索引的值很长,那么查询的速度会受到影响 尽量使用前缀来作为索引 尽量选择区分度高的列作为索引,区分度高是指字段不重复的列,比如不要给性别或状态等列建立索引 尽量的扩展索引,而不是新建索引 在需要排序的字段上面建立索引...加快数据的查询速度 可以加速表和表的连接 在查询过程中使用索引,还会触发mysql隐藏的优化器,提高查询性能 缺点 索引的创建和维护需要消耗时间,并且还占据一部分额外的空间,并且随着数据量增大,索引占用的空间也会增大...我们要综合考虑索引优缺点和创建索引的规则(哪些该创建索引,哪些不该创建索引)。

31620

MySQL进阶之索引【分类,性能分析,使用,设计原则

索引失效情况 6.4 SQL提示 6.5 覆盖索引 6.6 前缀索引 6.7 单列索引与联合索引 7、索引设计原则 ---- 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。...上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引擎对于索引结构的支持情况。...6.3.5 数据分布影响 如果MySQL评估使用索引比全表更慢,则不使用索引。...1、 use index : 建议MySQL使用哪一个索引完成此次查询(仅仅是建议,mysql内部还会再次进行评估)。...因为如果,我们使用单列索引,一条查询语句,存在多个索引MySQL只会选择其中一个,这样剩下的肯定会走回表查询降低性能的。 7、索引设计原则 针对于数据量较大,且查询比较频繁的表建立索引

30210

mysql索引是什么 优点和缺点_MySQL索引优缺点、使用原则及种类介绍「建议收藏」

一、索引简介 1、索引简介 索引(Index)是帮助MySQL高效获取数据的数据结构。 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。...4、索引的使用原则 A、主键自动建立唯一索引 B、频繁作为查询条件的字段应该创建索引 C、查询中与其他表关联的字段,外键关系建立索引 D、频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引...二、索引的分类 1、单列索引 单列索引只包含单个列,但一个表中可以有多个单列索引。 A、普通索引 普通索引允许在定义索引的列中插入重复值和空值。...B、唯一索引 索引列中的值必须是唯一的,但是允许为空值。 C、主键索引 主键索引是一种特殊的唯一索引,不允许有空值。...4、空间索引 空间索引是对空间数据类型的字段建立的索引MySQL中的空间数据类型有四种:GEOMETRY、POINT、LINESTRING、POLYGON。

48110

好文 | MySQL 索引B+树原理,以及建索引的几大原则

MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...Archive 引擎直到 MySQL 5.1 才支持索引,而且只支持索引单个 AUTO_INCREMENT 列。...先总结一下索引的几大基本原则,史上最全的 MySQL 高性能优化实战总结,这个推荐看一下。...四、建索引的几大原则 1、最左前缀匹配原则,非常重要的原则mysql会一直向右匹配直到遇到范围查询(>、 3...比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。 关注Java技术栈微信公众号,在后台回复关键字:mysql,可以获取更多栈长整理的MySQL数据库干货。

97010

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券