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

MySQL建索引需要的原则

1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。...因此,为这样的字段建立索引,可以提高整个表的查询速度。 4.限制索引的数目 索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。...mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序的索引...比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式 10.尽量选择区分度高的列作为索引。...使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条 记录 11.索引列不能参与计算,保持列“干净”。

2.8K20

mysql建索引优点及几大原则

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

1.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    在 MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。当数据项等于1时将会退化成线性表。...四、建索引的几大原则 1、最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、 3...使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录 4、索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time)...比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。 关注Java技术栈微信公众号,在后台回复关键字:mysql,可以获取更多栈长整理的MySQL数据库干货。

    1.4K10

    【Oracle】-【索引】先查数据再建索引,还是先建索引再插数据?

    问题: 1、新建一个表结构,创建索引,将百万或千万级的数据使用insert导入该表。 2、新建一个表结构,将百万或千万级的数据使用isnert导入该表,再创建索引。 这两种效率哪个高呢?...我感觉无论先建还是后建索引,当有数据时都需要update索引数据,问题是有索引的情况下插数据与有数据的情况下建立索引,各自的消耗。...总结: 如果先建立索引再插入数据,每次插入数据还需要修改索引信息。 实战还要看业务要求,有的业务可能还需要索引和约束对数据进行校验,这样就应该先建立索引了。...如果是一次性处理,原则上先插数据后建索引。...另外的问题: 使用nologging可以提高几秒钟,但使用parallel没变化,环境是虚机,4个物理CPU,8个虚拟CPU,这里parallel应该如何设置呢?也请高手指教!

    3.2K30

    【MySQL】分区字段列是否有必要再单独建索引

    对于分区字段必须是主键的一部分,那么建了复合主键之后,是否需要对分许字段再单独添加一个索引呢?有没有效果?...idx_ctime 5、分析添加索引后的执行计划 结果为: id select_type table partitions tpye possible_keys key key_len ref rows...分了区,只能说该字段为某个值的记录会在某个分区里面,但不是索引,还要一顿好找。 有时候,主键不等于分区依据列,这时候主键又想建聚集索引的话,那么必须包含分区依据列,搞成复合主键。...那么,这种情况下,分区依据列不就有索引了吗?...是的,可是它不够快,如果在这个复合索引里面,分区依据列不排在第一位,就不够快,如果查找语句里常常用分区依据列作为过滤条件,就有必要为分区依据列额外单独建立一个索引。

    3.3K30

    谈谈MySQL 索引,B+树原理,以及建索引的几大原则(MySQL面试第六弹)

    谈谈MySQL 索引,B+树原理,以及建索引的几大原则(MySQL面试第六弹) MYSQL一直了解得都不多,之前写sql准备提交生产环境之前的时候,老员工帮我检查了下sql,让修改了一下存储引擎,当时我使用的是...在 MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM) 可能对于没有了解过索引的猿友这样看这篇文章十分吃力,这类猿友有必要先对Mysql索引有个大体的了解。...; 更适合文件索引系统; 三、建索引的几大原则 最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、的字段我们都要求是0.1以上,即平均1条扫描10条记录 索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time)

    41310

    【63期】谈谈MySQL 索引,B+树原理,以及建索引的几大原则(MySQL面试第六弹)

    在 MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...B-Tree 索引是 MySQL 数据库中使用最为频繁的索引类型,除了 Archive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引。...InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM) 可能对于没有了解过索引的猿友这样看这篇文章十分吃力,这类猿友有必要先对Mysql索引有个大体的了解。...; 更适合文件索引系统; 三、建索引的几大原则 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、的字段我们都要求是0.1以上,即平均1条扫描10条记录 4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time)

    1.1K10

    【MySql】MySql索引的作用&&索引的理解

    【MySql】MySql索引的作用&&索引的理解 索引的作用 索引是与效率挂钩的,所以没有索引,可能会存在问题 索引:提高数据库的性能,索引是物美价廉的东西了。...MySQL的服务器,本质是在内存中的,所有的数据库的CURD操作,全部都是在内存中进行的!所以索引也是如此 提高算法效率的因素:1.组织数据的方式2.算法本身。...常见的索引分为以下几种 主键索引(primary key) 唯一索引(unique) 普通索引(index) 全文索引(fulltext)–解决中子文索引问题 创建一个海量表,在查询的时候,...解决方法,创建索引 alter table EMP add index(empno); 测试看查询时间 时间变得非常快!这就是索引带来的好处! 想认识索引之前,我们非常有必要先了解一下磁盘。...把整个的B+树称作mysql innode db下的索引结构,一般我们建表的时候,就是在该结构下进行CURD,即使没有主键也是这样子的,会有默认主键的至此,我们已经给我们的表user构建完了主键索引。

    1.2K30

    MySQL索引的本质,MySQL索引的实现,MySQL索引的数据结构

    (三)聚集索引和非聚集索引 二、MySQL中索引的实现(摘) (一)MyISAM索引实现: (二)InnoDB索引实现: 一、索引的本质 索引是帮助MySQL高效获取数据的排好序的数据结构。...(三)聚集索引和非聚集索引 回答这个问题之前先来看一下Mysql底层数据文件的存储方式,这里拿MyISAM和InnoDB两种引擎来做比较。 1、MyISAM引擎 ?...二、MySQL中索引的实现(摘) 在MySQL中,索引是在存储引擎层实现的,不同存储引擎对索引的实现方式是不同的,下面我们探讨一下MyISAM和InnoDB两个存储引擎的索引实现方式。...在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。...因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,

    2.5K30

    【MySQL】MySQL的索引

    索引的操作-全文索引 索引的操作-空间索引 索引的验证 索引的特点 介绍 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索 引,MySQL必须从第一条记录开始读完整个表...而3和4相比where条件的顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价的。...全文索引的版本、存储引擎、数据类型的支持情况: MySQL 5.6 以前的版本,只有 MyISAM 存储 引擎支持全文索引; MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引...; 只 有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引; 在数据量较大时候,现将 数据放入一个没有全局索引的表中,然后再用create index创建fulltext索引...-空间索引 介绍 MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型 空间索引是对空间数 据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT

    4.2K30

    MySQL的最低硬件要求?

    其实,在我的日常工作中经常能够遇到这个问题,这个问题通常来自客户的系统管理员或者是采购人员,原因基本有两个: 完全对数据库产品没有概念,不清楚对硬件的要求。...对MySQL数据库不熟悉,参照以往的商业数据库进行比较。 写下这篇文字回答一下这个问题,以供对MySQL数据库不熟悉的人员参考。 MySQL究竟有没有最低的硬件要求呢?...翻遍整个手册的内容你也找不到相关信息,除了MySQL NDB Cluster,但是NDB又和大家通常意识里的MySQL完全不同,因此你可以理解为MySQL对服务器的硬件没有最低要求。...这个一览表相当于从侧面提供了一个硬件最低要求,只要你的服务器能够正常安装使用所支持的操作系统,MySQL即可在服务器上运行。...换句话说,MySQL对硬件的要求非常低,不需要高大上的硬件支持,这也是MySQL流行起来的根本原因之一。

    5.9K10

    面试官问,MySQL建索引需要遵循哪些原则呢?

    面试官问,MySQL建索引需要遵循哪些原则呢? 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。...因此,为这样的字段建立索引,可以提高整个表的查询速度。 4.限制索引的数目 索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。...mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序的索引...比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式 10.尽量选择区分度高的列作为索引。...使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条 记录 11.索引列不能参与计算,保持列“干净”。

    29000

    MySQL的索引

    MySQL的索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,成本就越高。...如果表中有相关列的索引,MySQL可以快速确定在数据文件中查找的位置,而不必查看所有数据。使用索引是打开MySQL的正确方式,本篇将介绍MySQL的索引相关内容。...MySQL的索引可以用于以下操作: 快速查找与“WHERE”语句匹配的数据行。 排除数据行。如果在多个索引之间进行选择,MySQL通常使用找到行数最少的索引(最具选择性的索引)。...索引的类型 MySQL中的索引可以分为如下类型: 非唯一索引:索引值可以出现多次(默认索引类型)。 唯一索引:索引值必须唯一或为NULL。 主键:值必须唯一,并且不能包含NULL。...维护InnoDB的索引统计信息 MySQL的优化器利用索引的分布统计信息决定查询时使用的索引及联结顺序,当表中的行超过10%的变更后,会自动更新统计信息。

    1.3K10

    mysql的索引

    索引的好处 数据库索引是一个非常重要的东西,举个例子, 我们要去图书馆找一本>,最傻逼的做法就是从门口开始,一本一本看过去,直到找到这本书,有索引之后呢?...很明显速度快了很多,索引在表数据越大的时候越能体现用处 索引类型 mysql的索引类型分为以下几种: 普通索引 组合索引 唯一索引 主键索引 全文索引 我们根据不同的业务需求,去使用不同的索引,提高查询速度...普通索引  普通索引,顾名思义,就是普通的索引,没有其他特性,直接创建就可以使用 组合索引  组合索引是通过多个字段组合起来的索引, 主键索引 主键索引就是数据表的主键,主键是为了区分一个表中不同的数据列而产生的...,member_code"等等,但一个表只能有一个主键,每个主键都是唯一的,不可能出现重复的字段 唯一索引 唯一索引增加了对索引值的约束,代表着该值只能出现一次,不能重复插入, 主键是特殊的唯一索引 唯一索引值可以为多个...null,null代表没有存值,也就是null没有走索引 全文索引 全文索引是mysql的另一种技术 原理是先定义一个词库,然后在文章中查找每个词条(term)出现的频率和位置,把这样的频率和位置信息按照词库的顺序归纳

    1.4K10

    【MySql】MySql索引的操作

    Hash:时间效率是O(1)的,理论上是非常合适的,搜索效率确实快;官方的索引实现方式中, MySQL 是支持HASH的,不过 InnoDB 和 MyISAM 并不支持.Hash跟进其算法特征,决定了虽然有时候也很快...MyISAM 这种用户数据与索引数据分离的索引方案,叫做非聚簇索引 InnoDB 这种用户数据与索引数据在一起索引方案,叫做聚簇索引 创建InnoDB的表,聚簇索引 mysql> create table...: 创建myisam的表,非聚簇索引 mysql> create table test2( -> id int primary key, -> name varchar(20) not...null -> )engine=myisam; Query OK, 0 rows affected (0.02 sec) 当然, MySQL 除了默认会建立主键索引外,我们用户也有可能建立按照其他列信息建立的索引...MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。

    1.4K20

    【MySQL】索引的概念 && 常见的索引

    索引的概念在 MySQL 中,索引是一种用于提高查询效率的数据结构。它可以帮助数据库系统快速定位和访问表中的数据。索引可以基于一个或多个列创建,并且可以应用于表中的任何列。...MySQL 支持多种类型的索引,包括下面几种:主键索引(Primary Key Index):主键索引是一种唯一性索引,用于标识表中的每一行。每个表只能有一个主键索引,它可以跨多个列定义。...如果没有逻辑上唯一且非空的列或列集可以使用主键,则 MySQL 会自动添加一个自增列。唯一索引(Unique Index):唯一索引确保索引列中的值是唯一的,但允许包含空值。一个表可以有多个唯一索引。...聚簇索引:与主键索引是同义词一个表只能有一个聚簇索引,它决定了数据的物理存储顺序。索引的叶节点直接存储了完整的数据行。...非聚簇索引:聚簇索引以外的索引,统称为非聚簇索引或二级索引一个表可以有多个非聚簇索引,它们不改变数据的物理存储顺序,叶节点存储的是指向数据行的指针。

    23210

    ClickHouse学习-建表和索引的优化点(一)

    ClickHouse 优化点 clickhouse 相对于mysql,除了在mysql在SQL和索引的优化空间比较大外,而其他的clickhouse的优化空间还是很大的,对于clickhouse他的服务端配置参数对于任务的影响还是很大的...现在我们来看看clickhouse都有哪些常规的优化点,今天主要学习一下创建表的时候需要注意的点 建表优化 1. 数据类型 1.1 null值尽量避免 1.2 日期都存储为日期类型 时间戳类型。...2.2 索引优化 我们先搞清楚,clickhouse的索引是如何存储的,当数据被插入到表中时,会创建多个数据片段并按主键的字典序排序。...我们已经知道索引是如何存储的了,那我们就可以试着优化一下 从上面的结构我们可以看出他是一个稀疏索引,从图中我们可以清楚的看见他的创建规则,必须指定索引列,ClickHouse中的索引列即排序列,通过order...总结 建表优化,创建字段的时候尽量不要使用nullable 日期尽量都使用date类型 索引存储的规则 创建索引尽量选择基数大的,也就是重复相对较多的(因为是稀疏索引)在mysql中正好是相反的他需要创建索引的时候基数相对较大的

    4.1K20

    MySQL索引与MongoDB索引的区别

    介绍了为什么MySQL使用B+TREE 而 MongoDB使用B-TREE MySQL索引与MongoDB索引的区别 1....背景 最近学习了MySQL的索引的相关内容,而目前生产系统上使用的使MongoDB,遂对这两个不同数据库的索引进行了下对比。这里的MySQL值得使Innodb存储引擎。 2....两个数据库之间的区别 MySQL中的Innodb采用的使B+Tree作为索引的结构,而MongoDB使用的使B-Tree作为索引结构,所以这两个数据库索引之间的区别也就是这两种数据结构之间的区别 2.1...那这里,我们需要用两张表表示二者之间逻辑关系,如下所示 此时如果需要查询cname为1班的班级,有多少学生,MySQL怎么执行(cname这列建了索引)?...参考 为什么Mongodb索引用B树,而Mysql用B+树?

    6.3K10

    「Mysql索引原理(三)」Mysql中的Hash索引原理

    看如下查询: select lname from testhash where fname ='Peter' Mysql首先计算Peter的哈希值是8784,然后到哈希索引中找到对应的行指针..._2622285' ) and url='https://blog.csdn.net/qq_2622285' mysql优化器会选择性能高且体积小的基于url_crc列的索引来完成查找,即使用多个相同的索引值...2、mysql同时提供了SHA1()、MD5()两个加密函数,不要使用这两个函数做哈希函数,他们是强加密函数,设计目标是最大限度消除冲突,但计算的哈希值很长,浪费空间且有时更慢。...和B+Tree索引不同,这类索引无需前缀查询。空间索引从所有维度索引数据。查询时,可以有效地使用任意维度来组合查询。必须使用Mysql的GIS相关函数如MBRCONTAINS()等来维护数据。...Mysql 的GIS并不完善,大部分人不会使用到这个特性。开源关系数据库中对GIS的解决方案做得比较好的是PostgreSQL的PostGIS。

    10.3K11

    ElasticSearch2.1的java api批量建索引方法

    es里面提供了两种批量建索引的方法: 1,使用 Bulk Api 特点是:使用比较简单,但控制不够灵活 2,使用Bulk Processor 特点是:使用稍麻烦,控制非常灵活...至于为什么要批量建索引,相信大伙已经不陌生了,为的就是提高写入效率,效率,效率!...数量大的情况下,10ms性能的提升,都有可能带来巨大的优化效果,所以时时刻刻考虑系统的性能无疑是 一个优秀的工程师必须具备的一种素质。...(二)使用Bulk Processor处理也比较简单,注意参数的设置,会影响索引的性能: BulkProcessor实例初始化之后,就可以直接 游标读取添加就行: ?...建立索引时,可以关闭索引的副本功能,可以极大提高写入效率,但索引完成时,可以执行如下命令动态,添加副本: Shell代码 curl -XPUT 'localhost:9200/company/_settings

    94070
    领券