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中主键是聚集索引,其他都是辅助索引

平衡树

用到平衡树的算法,会算取中间范围,让树不会成为歪脖树。所以每次添加索引需要时间长点,他在构造以索引为主的平衡树

552971c3804558efeac5de8942e12cbc.png

B+树

B+树就是平衡树的升级版,将各个节点也可以链式连接起来,这样查找的时候,(20 between 70)就不用回到起点从新查找。就可以纵向查找了

a8c87dd083f2d7b0d0bc94202b03cc1c.png

索引

索引的优点 : 加速查询效率

索引的缺点 : 拖慢写的速度,占用更多的硬盘(解决办法分布式读写分离)

# 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开始分,进行排序,形成树

5b42c41ab310229a5a64cd34bda6bc3b.png

索引合并

意思是:创建的时候是2个单独的索引,但是在使用的时候临时合并成一个。

以下是查看mysql分析查看的结果,Mysql把2个独立的索引合并成了一个使用,为了更快捷的查看以下图片中的语句。

028fa122ff1800a16950a1647ad663b4.png

索引覆盖

'Using Index'的意思是“覆盖索引”,它是使上面sql性能提升的关键

一个包含查询所需字段的索引称为“覆盖索引”

MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率

以下例子

aa1b7f3025878fc1557e771438a5f1a2.png

上图,首先我们要知道。innodb中主键是聚集索引,其他都是辅助索引

加入上表不是以id为主键的表,所以id是辅助索引,当你查询的时候,需要通过id找到主键,在从聚集索引中查找在辅助索引中找到的主键,此时需要回表。

而我查询的只是索引。不需要回表,因为已经查到了。这就是索引覆盖

MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

【题目分析】 Matrix-Tree定理高斯消元 求矩阵行列式的值&#xff0c;就可以得到生成树的个数。 至于证明&#xff0c;可以去看Vflea King&#xff08;炸树狂魔&#xff09;的博客 【代码】 #include <cmath> #include <cstdio> #include <cstring> #include…

深度ip转换器手机版app_房串串经纪人版app下载-房串串经纪人版app手机版 v1.0.0...

房串串经纪人版app&#xff1a;专门为房产经纪人打造的辅助办公软件&#xff0c;提供的功能非常的全面&#xff0c;涵盖了房产服务过程中的各个环节&#xff0c;随时可以手机在线处理自己的日常工作&#xff0c;提高了工作的效率&#xff0c;操作很简单&#xff0c;让你更好的实…

netduino之电源参考电路MC33269DT-5.0G

手里有块netduino的板子&#xff0c;一直闲置未用&#xff0c;netduino具体是什么不知道的就百度吧&#xff0c;我这也不是主要讲netduino开发的&#xff0c;简单说就是用.net开发硬件&#xff0c;了解到netduino也是原来学过C#&#xff0c;当然我主要的工作还是嵌入式硬件开发…

汉王考勤 连接mysql_汉王考勤管理软件打开时出现:连接数据错误,请确认数据库服务器信息是否有误。这样该怎样解决?...

汉王指纹考勤系统故障答疑1. 考勤钟上的指纹记录丢失了。答&#xff1a;没有可能自己丢失&#xff0c;只可能是误删除了指纹信息&#xff0c;只能重新登录指纹。2. 在预处理时时间过长。答&#xff1a;由于用户单位的人员多&#xff0c;软件设置的班次乱等因素造成&#xff1b;…

PowerShell使用教程

一、说明 1.1 背景说明 个人对PowerShell也不是很熟悉&#xff0c;开始的时候就突然看到开始菜单中多了个叫PowerShell的文件夹&#xff0c;后来一点就看到某个教程视频说PowerShell很厉害但也没怎么听&#xff0c;再后来就看到kali也有了一些PowerShell的脚本这才意识到PowerS…

python Gunicorn

1. 简介 Gunicorn(Green Unicorn)是给Unix用的WSGI HTTP 服务器&#xff0c;它与不同的web框架是非常兼容的、易安装、轻、速度快。 2. 示例代码1 def app(environ, start_response):data b"Hello World\n"start_response("200 OK", [("Content-Type…

如何使处于不同局域网的计算机实现远程通信_小区自来水二次加压泵站远程监控系统方案...

一、小区自来水二次加压泵站远程监控系统方案项目概述随着城市高效快速地发展&#xff0c;市区规模越来越大&#xff0c;小区二次加压泵房将继续增加&#xff0c;供水公司二次加压泵房管理工作将更加繁重。目前小区二次加压供水方式主要有两种&#xff0c;一种是不锈钢水箱不锈…

Java中的Enum的使用与分析

示例&#xff1a; public enum EnumTest {FRANK("The given name of me"),LIU("The family name of me");private String context;private String getContext(){return this.context;}private EnumTest(String context){this.context context;}public sta…

postgresql返回行数_怎么优化你的SQL查询?以PostgreSQL为例

实际工作中&#xff0c;我们每个人难免都会要写SQL&#xff0c;执行SQL&#xff0c;但是有时时候执行非常慢&#xff0c;甚至获得不了结果。这时候你会怎么办&#xff1f;放弃&#xff1f;去苦口婆心的求隔壁房间胡子擦擦的猥琐DBA大叔&#xff1f;NO&#xff0c;正确方法是先检…

首次构建android studio gradle 下载缓慢的问题

1、先使用其他工具下载gradle&#xff0c; https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 2、然后放在C:\Users\Administrator\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv 目录中 随机码文件夹可以通过先尝试构建&#xff0c;让…

288. Unique Word Abbreviation

题目&#xff1a; An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations: a) it --> it (no abbreviation)1 b) d|o|g --> d…

jqgrid mysql 分页_jQgrid 分页显示

当使用jqgrid去显示数据的时候&#xff0c;如果数据太多&#xff0c;那么jqgrid就会绘制的很慢&#xff0c;这样很影响用户的体验&#xff0c;十分影响用户的心情&#xff0c;所以我们采用分页的方式去取数据&#xff0c;这样就能避免用户长时间的等待&#xff0c;从而提升用户…

echarts 词云_python Flask+爬虫制作股票查询、历史数据、股评词云网页

自学python的数据分析&#xff0c;爬虫后&#xff0c;花了几天时间看视频学习Flask做了一个简单的股票查询网页。本来还想着加入一些其他功能&#xff0c;比如财务指标分析&#xff0c;舆情分析&#xff0c;最完美的想法是做成一个股票评分系统&#xff0c;输入股票代码可以自动…

JavaSE基础知识(6)—异常和异常处理

一、异常的理解及体系结构图 1、理解 异常&#xff1a;程序运行过程中发生的不正常现象。java中的错误&#xff1a;   语法错误   运行异常   逻辑错误 2、体系图 java程序在执行过程中所发生的异常分为两类&#xff1a; Error&#xff1a;Java虚拟机无法解决的严重问题。…

peripheralStateNotificationCB

1 /*********************************************************************2 * fn peripheralStateNotificationCB 外围设备 状态 通知 回调函数3 *4 * brief Notification from the profile of a state change. 通知来自于profile的状态改变&#xff01;5 *6 * …

mysql dump 1017_MySQL数据库导出 - Can't Wait Any Longer - OSCHINA - 中文开源技术交流社区...

本文内容主要来自MySQL官方文档&#xff1a;“MySQL5.1 Reference&#xff0c;2.10.3. 将MySQL数据库拷贝到另一台机器”注意&#xff1a;参数名与值间可以不用空格&#xff0c;如-uroot或-u root均可&#xff1b;某些参数会有不同含义1.数据库导出(-A导出所有数据库&#xff0…

Jsp2.0自定义标签(第二天)——自定义循环标签

今天是学习自定义标签的第二天&#xff0c;主要是写一个自定义的循环标签。 先看效果图&#xff1a; 前台页面Jsp代码 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <%taglib prefix"myout…

正则表达式以什么开头以什么结尾_股票hk是什么意思,股票st开头是什么意思,新通联股票...

股票hk是什么意思,股票st开头是什么意思,新通联股票股票hk是什么意思,股票st开头是什么意思,新通联股票我们首先解决时间跨度问题&#xff1a;如果您为诸如退休之类的遥远目标投资&#xff0c;则应主要投资股票(同样&#xff0c;我们建议您通过共同基金投资)。心理控制第一&…

读书笔记--SQL必知必会03--排序检索数据

3.1 排序数据 子句&#xff08;clause&#xff09; SQL语句由子句构成。一个子句通常由一个关键字加上所提供的数据组成。 ORDER BY子句可以取一个或多个列的名字&#xff0c;将SELECT语句检索出的数据进行排序。 ORDER BY子句可以使用非检索的列排序数据。 ORDER BY子句必须作…

mysql中编写匿名块_Oracle数据库之Oracle_PL/SQL(1) 匿名块

本文主要向大家介绍了Oracle数据库之Oracle_PL/SQL(1) 匿名块&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习Oracle数据库有所帮助。1. PL/SQL 简介PL/SQL是一种比较复杂的程序设计语言, 用于从各种环境中访问Oracle数据库。为什么使用PL/SQL&#xff1f;Ora…