mysql索引引擎_mysql搜索引擎和索引那些事
mysql的存储引擎
三种存储方式
**InnoDB **(默认)
一个文件存储表结构,一个存储数据和目录(索引)
# 一个文件 book_name | author| press | price | pub_date frm文件 frame的缩写
# 另一个文件(数据+ 目录)
# | 倚天屠龙记 | egon | 北京工业地雷出版社 | 70.00 | 2019-07-01 |
# | 九阳神功 | alex | 人民音乐不好听出版社 | 5.00 | 2018-07-04 |
# | 降龙十巴掌 | egon | 知识产权没有用出版社 | 20.00 | 2019-07-05 |
# | 葵花宝典 | yuan | 知识产权没有用出版社 | 33.00 | 2019-08-02 |
# | 彭于晏的枕边故事 | 彭于晏 | py26期出版社 | 80.00 | 2020-10-30 |
memory
一个文件存储数据结构,数据存储在内存(差的快,早期都是这种存储方式,现在有redis了)
MyIsam
一个文件表结构,一个存储数据,还有一个放目录(索引)
# 一个文件 book_name | author| press | price | pub_date frm文件 frame的缩写
# 另一个文件(数据)
# 另一个文件(目录)
数据库中数据的存储方式
实际的数据库中数据的存储方式
平衡树 balance tree b-tree
b+树 :能够更好的降低树的高度,并且对范围查询比较友好
myisam/innodb存储引擎 : 索引结构都是通过b+树实现的
每一个字段都可以创建索引
对于一个字段创建的索引在当前字段作为条件的时候可以起到加速作用
索引分两类 :
# 聚集索引(聚簇索引) :数据和索引存在一颗树上
# 辅助索引(非聚集索引/非聚簇索引) :数据和索引不存在一颗树上
你必须要在innodb中的所有表都要主动创建主键,主键就是最好的索引
myisam和innodb在索引上的不同
# myisam中所有的索引都是辅助索引
# innodb中主键是聚集索引,其他都是辅助索引
平衡树
用到平衡树的算法,会算取中间范围,让树不会成为歪脖树。所以每次添加索引需要时间长点,他在构造以索引为主的平衡树
B+树
B+树就是平衡树的升级版,将各个节点也可以链式连接起来,这样查找的时候,(20 between 70)就不用回到起点从新查找。就可以纵向查找了
索引
索引的优点 : 加速查询效率
索引的缺点 : 拖慢写的速度,占用更多的硬盘(解决办法分布式读写分离)
# create index 索引名 on 表名(字段名);
# create index ind_id on s1(id);
# drop index 索引名 on 表名;
# drop index ind_id on s1;
# 查看
# show create table s1;
正确的使用索引
这里说一下,mysql只能命中一个索引,当你创建多个索引的时候,他在执行语句时,会先走分析器,分析使用什么索引最快,就是平衡树结构更健康。如果你想看mysql分析结果。在查询语句前加上explain
# 1.对哪个字段创建了索引,条件就使用那个字段
# 2.条件列不能参与计算,不能调用函数
# 3.如果列中重复值多,那么不适合创建索引(性别)(1/10)
# 4.尽量不使用范围查询,范围越小效率越高
# 5.使用like 'a%'
# 6.and 相连的多个条件 如果有一个索引都可以被命中
# 7.or 相连的多个条件 必须都有索引才能命中
# 8.联合索引和最左前缀原则(不能使用范围,从使用了范围的那个字段之后的所有条件都无法命中索引,条件之间只能用and不能用or)
# create index mix_ind on s1(id,email,name);
# 可以命中索引
# select * from s1 where id = 2000000 and email='eva2000000@oldboy' and name='eva';
# select * from s1 where id = 2000000 and name='eva';
# select * from s1 where id = 2000000 and email='eva2000000@oldboy';
# select * from s1 where id = 2000000;
# 2000000 eva jingliyang@xxx
# 不能命中索引
# select * from s1 where email='eva2000000@oldboy';
# select * from s1 where name='eva';
# select * from s1 where id = 1000000 and email like 'eva2000000@oldboy';
联合索引就是用多个字段当索引,以主键为第一个(id)开始分大小,id分完按照下一个email开始分,进行排序,形成树
索引合并
意思是:创建的时候是2个单独的索引,但是在使用的时候临时合并成一个。
以下是查看mysql分析查看的结果,Mysql把2个独立的索引合并成了一个使用,为了更快捷的查看以下图片中的语句。
索引覆盖
'Using Index'的意思是“覆盖索引”,它是使上面sql性能提升的关键
一个包含查询所需字段的索引称为“覆盖索引”
MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率
以下例子
上图,首先我们要知道。innodb中主键是聚集索引,其他都是辅助索引
加入上表不是以id为主键的表,所以id是辅助索引,当你查询的时候,需要通过id找到主键,在从聚集索引中查找在辅助索引中找到的主键,此时需要回表。
而我查询的只是索引。不需要回表,因为已经查到了。这就是索引覆盖
MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率
mysql索引引擎_mysql搜索引擎和索引那些事相关推荐
- mysql vpformysql引擎_MySQL InnoDB引擎B+树索引简单整理说明
本文出处:http://www.cnblogs.com/wy123/p/7211742.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- mysql lucene 索引区别_MySQL和Lucene索引对比分析
MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过 ...
- mysql几种索引类型_Mysql几种索引类型的区别及适用情况
如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyI ...
- mysql索引教程_MySQL教程96-MySQL索引类型
索引的类型和存储引擎有关,每种存储引擎所支持的索引类型不一定完全相同.MySQL 索引可以从存储方式.逻辑角度和实际使用的角度来进行分类. 存储方式区分 根据存储方式的不同,MySQL 中常用的索引在 ...
- mysql索引下沉_MySQL 5.6 索引条件下推优化
索引下推优化是MySQL5.6版本中新加的功能. 索引条件下推(ICP)是对MySQL使用索引从表中检索行的情况的优化.如果没有ICP,存储引擎会遍历索引以查找基表中的行,并将它们返回给MySQL服务 ...
- mysql索引方式_MySQL数据库的索引方式
MySQL目前主要支持索引方法:B-Tree,Hash,R-Tree B-Tree B-Tree是最常见的索引类型,所有的列都是排序过的,每个叶节点跟节点距离相等.因此,B-Tree适合查找范围的数据 ...
- 初入了解MySQL储存引擎和B+Tree索引
InnoDB存储引擎 从mysql5.5.8开始,InnoDB是默认的存储引擎.在InnoDB中存在着缓冲管理,通过缓冲池,将索引和表数据全部缓存起来,加快查询的速度. 由 .frm文件.表空间(分为 ...
- mysql行锁索引问题_Mysql锁机制--索引失效导致行锁变表锁
=============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不会产生相互影响.不会阻塞, ...
- mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...
什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...
最新文章
- 面经:什么是Transformer位置编码?
- PHP Misc. 函数
- pyinstaller---将py文件打包成exe
- Django08-1:模型层(ORM)--聚合查询/分组查询/F与Q查询/开启事务/常用字段及参数/自定义字段/数据库查询优化
- Linux进程间通信方式--本地socket
- 三级嵌入式选择知识点整理
- vue 前端显示图片加token_前端甩锅神器:vue中的mock使用
- JS作用域链(转载)
- 随想录(写给8-10年工作经验的同学)
- iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
- Bailian4002 谁是你的潜在朋友【暴力】
- latex的下载与安装
- java ini_Java读取ini文件 [org.dtools.javaini] | 学步园
- 基于PG与PostGIS搭建实时矢量瓦片服务
- 短视频处理LanSoEditor-SDK之抠图和动画设计
- 韩国为什么“恢复”汉字?
- 虚拟机安装---模板机准备1(最小化安装)
- [转]GridView控件使用经验
- Plist Converter for mac(plist文件转换工具)
- 【小甲鱼Python】递归:这帮小兔崽子、汉诺塔课后作业