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

Mysql索引优化实例1

目录 目录 前言 当前情况介绍 分析及优化 结果 前言 PS:本文只讲解了一个实例,中间用到了两个mysql的索引相关概念,覆盖索引和最左前缀索引,需要读者自行学习一下....所以最后的决定是,不使用缓存或者lucene等花里胡哨的东西,就使用mysql,优化一下索引,争取到做的单个查询300ms内,这样加上一些带代码层面的优化,接口能接近1s左右....分析第二个语句,使用了索引,但是仅使用了联合索引的第一个,因为不半部分是个表达式,无法使用索引. 第三个语句,虽然存在两个对应字段的独立索引,但是根据执行计划显示,mysql没有使用第二个索引....联系邮箱:huyanshi2580@gmail.com 更多学习笔记见个人博客——>呼延十 var gitment = new Gitment({ id: 'Mysql索引优化实例1', // 可选...Next Mysql索引原理及其优化 ----

79840

【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会自动在主键列上建立一个索引,这 就是主键索引。...而3和4相比where条件的顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价的。...全文索引的版本、存储引擎、数据类型的支持情况: MySQL 5.6 以前的版本,只有 MyISAM 存储 引擎支持全文索引; MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引...-空间索引 介绍 MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型 空间索引是对空间数 据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT

    4.2K30

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

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

    2.5K30

    正确使用索引和Explain工具,MySQL性能提升实例

    table: row行引用的表。. type: 这个字段是MySQL连接使用的表的方式。这可能是explain输出中最重要的字段。它可以指示缺失的索引,还可以显示应该如何重写查询。...possible_keys:显示MySQL可以使用的键,以便从表中查找行。这些键可以在实践中使用,也可以不使用。 key:指示MySQL使用的实际索引。MySQL总是寻找可以用于查询的最优密钥。...Explain输出格式的完整文档可以在MySQL官方页面找到。...更多全文索引可以在这里找到(https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html)。...从历史上看,MySQL的实现Order By排序,尤其是加上LIMIT,常常是导致MySQL性能问题的原因。这种组合也用于大多数具有大型数据集的交互式应用程序。

    2.1K30

    MySQL的索引

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

    1.3K10

    【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):唯一索引确保索引列中的值是唯一的,但允许包含空值。一个表可以有多个唯一索引。...聚簇索引:与主键索引是同义词一个表只能有一个聚簇索引,它决定了数据的物理存储顺序。索引的叶节点直接存储了完整的数据行。...非聚簇索引:聚簇索引以外的索引,统称为非聚簇索引或二级索引一个表可以有多个非聚簇索引,它们不改变数据的物理存储顺序,叶节点存储的是指向数据行的指针。

    24410

    mysql的索引

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

    1.5K10

    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,然后到哈希索引中找到对应的行指针...实例 CREATE TABLE `url_hash` ( `url` varchar(255) DEFAULT NULL, `url_crc` bigint(10) DEFAULT NULL,..._2622285' ) and url='https://blog.csdn.net/qq_2622285' mysql优化器会选择性能高且体积小的基于url_crc列的索引来完成查找,即使用多个相同的索引值...和B+Tree索引不同,这类索引无需前缀查询。空间索引从所有维度索引数据。查询时,可以有效地使用任意维度来组合查询。必须使用Mysql的GIS相关函数如MBRCONTAINS()等来维护数据。...Mysql 的GIS并不完善,大部分人不会使用到这个特性。开源关系数据库中对GIS的解决方案做得比较好的是PostgreSQL的PostGIS。

    10.3K11

    MySQL 的 hash 索引

    除了B-Tree 索引,MySQL还提供了如下索引: Hash索引 只有Memory引擎支持,场景简单 R-Tree索引 MyISAM的一个特殊索引类型,主要用于地理空间数据类型 Full-text MyISAM...的一个特殊索引,主要用于全文索引,从MySQL 5.6开始InnoDB支持全文索引 索引 / 存储引擎 MyISAM InnoDB Memory B-Tree索引 支持 支持 支持 HASH索引 不支持...Memory只有在"="的条件下才会使用hash索引 MySQL在 8.0才支持函数索引,在此之前是能对列的前面某一部分进行索引,例如标题title字段,可以只取title的前10个字符索引,这样的特性大大缩小了索引文件的大小...使用 hash 自然会有哈希冲突可能,MySQL 采取拉链法解决。 Hash索引基于Hash表实现,只有查询条件精确匹配Hash索引中的列时,才能够使用到hash索引。...若此时,在email建立哈希索引,查询以int查询,性能就比字符串比对查询快多了。 Hash 算法 建立哈希索引,首先就要选定哈希算法,《高性能MySQL》说到的CRC32算法。

    5.9K60

    【MySQL】索引的操作

    索引的操作一、索引的创建原则索引最大的好处是提高查询速度,但是索引也是有缺点的,比如:需要占用物理空间,数量越大,占用空间越大;创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增大;会降低表的增删改的效率...where 条件、group by 和 order by 里用不到的字段,不适合创建索引。索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的,因为索引是会占用物理空间的。...在这些情况下,还不如不要索引,因为 MySQL 还有一个查询优化器,查询优化器发现某个值出现在表的数据行中的百分比很高的时候,它一般会忽略索引,进行全表扫描。经常需要更新的字段,不适合创建索引。...因此,使用联合索引时,存在最左匹配原则,也就是按照最左优先的方式进行索引的匹配。在使用联合索引进行查询的时候,如果不遵循「最左匹配原则」,联合索引会失效,这样就无法利用到索引快速查询的特性了。...这意味着,如果查询条件中只使用了索引的前缀字段,那么索引可以被充分利用;而如果查询条件中使用了索引的后续字段,那么索引的效率会降低。

    26910

    Mysql中的索引

    Mysql索引类型 Primary key/主键索引,Innodb 中又叫聚簇索引,InnoDB存储引擎的表会存在主键(唯一非null),如果建表的时候没有指定主键,则会使用第一非空的唯一索引作为聚集索引...Unique(唯一索引):索引列必须唯一,但允许有空值,若是组合索引,则列值的组合必须保持唯一。 Key(普通索引),是MySQL中基本的索引类型,允许列中有空值,重复值。...图中的每个节点称为页,页就是我们上面说的磁盘块,在MySQL中数据读取的基本单位是页,所以我们这里叫做页更符合MySQL中索引的底层数据结构。...聚簇索引和非聚簇索引 在Mysql中B+树索引按照存储方式的不同分为聚集索引和非聚集索引。...相关命令 Mysql5.7主从复制配置 Mysql通过binlog恢复数据 Mysql之binlog三种模式 Mysql中的binlog入门介绍

    4.6K20

    【MySQL】索引

    一、什么是索引 MySQL 是索引的一种数据结构,他可以帮助数据库高校的查询、更新数据表中的数据。通过一定的排序规则排列数据表中的记录,加快对表的查询。...可以提高查询效率:减少数据库在执行查询需要扫描的数据量。在大量的数据中,如果没有索引需要扫描整个表,如果有了索引,那么可以快速定位。...优化连接操作:在多表连接查询时,索引可以帮助数据库更快的找到连接。 三、索引的分类 哈希索引 结构特点:基于哈希表实现,通过索引键的哈希值直接定位数据位置,类似字典的“键-值”映射。...优势:时间复杂度为O(1),查找速度快 局限性:1.主要:不支持范围查找、排序和模糊查询;2.哈希冲突影响性能;3.MySQL并没有选择哈希作为默认数据结构,仅Memory默认支持。...经常用于数据库和文件系统等场合的平衡查找树。MySQL索引采用的数据结构。 2.查询方式:与B树类似,但是其可以利用叶子节点的链表结构,快速遍历范围内的所有数据。

    40410

    MySQL索引

    主键索引的建立,是在规范化创建表的时候就自动添加了 实例(建表时添加) mysql> create table test(id int(4) not null auto_increment,name char...实例2(建表后增加) alter table test change id id int(4) primary key not null auto_increment; 普通索引 加快查询速度,工作中优化数据库的关键...创建格式: alter table 表名 add index 索引名(列名); create index 索引名 on 表名(列名); 实例(MUL就代表是普通索引): mysql> alter table...index name_idx on test(name(8)); show index from test\G 实例 mysql> create index name_idx on test(name...5、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 6、key 显示MySQL在查询中实际使用的索引, 若没有使用索引

    5.3K50

    MySQL索引

    InnoDB; insert into t(id, name, k) values (1, 'Java', 100), (2, 'Python', 200), (3, 'Go', 300), (5, 'MySQL...主键索引又称聚簇索引,主键索引的叶子节点存储的是整行数据 非主键索引又称二级索引,非主键索引的叶子结点存储的是主键的值 假设我们有以下两个SQL语句: -- SQL1 select * from t where...基于非主键索引的查询可能需要多扫描一棵索引树,因此我们在查询的时候尽量使用主键查询。 索引维护 B+树为了维护索引有序性,在插入新值时必须做必要的维护。...该索引k覆盖了我们的查询需求,因此称之为覆盖索引。 最左前缀原则 B+树索引结构,可以利用索引的最左前缀来定位记录。索引项是按照索引定义里面出现的字段顺序进行排序。...最左前缀可以是联合索引的最左的N个字段,也可以是字符串索引的最左M个字符。 索引下推 索引遍历过程中,会对索引的中包含的字段先进性判断,直接过滤掉不满足条件的记录,减少回表次数。

    5K20

    MySQL 索引

    如果没有索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多。...1.3、索引存储分类 其中MySQL中的索引的存储类型有两种:BTREE、HASH。要想知道在这二种存储类型中是如何查找的,那么就必须学会算法的知识,对于现在的我们只需要了解索引的作用及功能就好了。...可能的取值有 const、eq_ref、index和all等 possible_keys: MySQL在搜索数据记录时可以选用的各个索引,该表中就只有一个索引,bname key: 实际选用的索引 key_len...: 显示了mysql使用索引的长度(也就是使用的索引个数),当 key 字段的值为 null时,索引的长度就是 null。...注意,key_len的值可以告诉你在联合索引中mysql会真正使用了哪些索引。 ref: 给出关联关系中另一个数据表中数据列的名字。

    14.1K20
    领券