mysql中索引的作用是什么_详解mysql中索引的作用
1. 索引是什么,首先我们可以举个例子,字典大家应该都使用过,我们可以使用目录快速定位到所要查找的内容,那么索引跟目录的作用类似,在数据库表记录中,利用索引,可以快速过滤查找到数据记录。
2. 索引类型分类
2.1 普通索引
加快查询速度
2.2 唯一索引
加快查询速度,并且可以限制列值的唯一性,允许为空
唯一索引包括联合唯一索引,多列形成的唯一索引,这些列可以唯一确定一条表记录,可以为空
2.3 全文索引
主要针对文本的内容进行分词,加快查询速度
2.4 联合索引
多列组成的索引,查询效率提升高于多个单列索引合并的效率
2.5 主键索引
主键唯一性,加快查询速度,不能为空
3. 索引结构分类
索引有很多分类,例如B-tree索引,哈希索引,全文索引等等,索引的实现是在存储引擎层,并不是在后端服务器层,所以不同的存储引擎支持的索引结构也不一定一样
3.1 B-tree索引
B-tree 索引普遍存在于存储引擎中,他使用B-tree数据结构来存储数据,如果对树形数据结构比较了解的话,就知道B-tree索引所带来的好处了,他的每个叶子节点都会包含下一个节点的指针,非常方便查询数据
B-tree 适用于全键值,键值范围,或者前缀查找
3.2 哈希索引
哈希索引基于哈希表实现,对于每一行数据,存储引擎会对所有的索引列计算一个哈希码,然后存储引擎会基于这个哈希码来查找数据,小编感觉有点像HashMap 中槽的查询过程
3.3 全文索引
全文索引在几种索引结构类型中比较特殊,他查找的是文本中关键词
4. 索引的正确使用
索引是建立在系统文件上的,会占用一定的内存空间,另外数据在更新的时候也会去维护索引,消耗内存,所以索引一定要正确的使用,索引并不是越多越好,要根据具体的查询业务来规划索引的建立。
建议不要使用索引的几种情况:
1. 区分度不是很大的字段,例如 性别 sex
2. 频繁更新的字段
3. 字符串类型的字段 或者 文本类型的字段
4. 不在where列中出现的索引
索引失效的几种情况:
1. 查询列中有函数计算
2. 查询列中有模糊查询,"%cloum",可以使用"cloum%" 代替,如果要使用"%column%",那么select 列中是索引列
3. 如果查询条件中有or, 索引会失效,除非所有条件都加上索引
4. 使用不等于(!= 或者 <>)
5. is null 或者 is not null
6. 字符串不加引号,会导致索引失效
7. 最左原则,联合索引中会遵循最左原则,即如果要使用联合索引,那么前面的索引列一定要包含,举个例子,
有个联合索引(a,b,c) 那么查询条件中只能是 a=1 或者 a=1 and b=1 或者 a=1 and b=1 and c=1,不然索引就会失效
5. explain 分析查询sql
select_type :
SIMPLE: 简单的查询,不包括子查询,关联查询等等
PRIMARY: 查询中如果有复杂的部分,最外层的查询将被标记为PRIMARY
SUBQUERY: 子查询中的第一个查询
UNION: 关联查询,最后面的一个
..............
type:查询语句的性能表现: 依次递增 all
All: 全表扫描,最耗性能
index: 全索引列扫描
range: 对单个索引列进行范围查找 ,使用 < 或者 between and 或者 in 或者 !=
index_merge: 多个索引合并查询
ref: 根据单个索引查找
eq_ref: 连接时使用primary key 或者 unique类型
constant: 常量
system: 系统
possible_keys: 可能使用到的索引
key: 真实使用的索引
key_len: 使用到的索引长度
rows:扫描的行数
extra:包含MySQL为了解决查询的详细信息
6. 慢查询日志
慢查询日志是指 mysql中查询 时间超过固定阈值的查询记录,默认时间是10秒,mysql默认情况下不开启慢查询
默认:show variables like "%slow_query_log%"
手动开启 set global 变量名 = 值
set global slow_query_log = on ; 手动开启慢查询日志
set global long_query_time = 10; 手动设定查询时间超过的值,超过就会记录查询日志
set global slow_query_log_file = "G:\var\slow_log.txt"; 手动设定慢查询日志的记录地址
set global log_queries_not_using_indexs = on ; 手动设定 是否要记录 查询中使用到索引的记录
mysql中索引的作用是什么_详解mysql中索引的作用相关推荐
- java中的静态变量的作用域_详解JAVA中static的作用
1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...
- python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂
一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...
- python中heapq的库是什么_详解Python中heapq模块的用法
详解Python中heapq模块的用法 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...
- python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发
strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...
- mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...
- 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明
复合索引 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排序的.现 ...
- mysql分页总页数算法解析_详解MySQL的limit用法和分页查询语句的性能分析
limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT ...
- python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...
__new__: 对象的创建,是一个静态方法,第一个参数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是sel ...
- python中字典和json的区别_详解python中的json和字典dict
定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...
最新文章
- 四连通,和八连通的详解(MATLAB)
- 关于DiscuzNT 1.0
- C/C++ 笔试、面试题目大汇总
- linux的cpu信息怎么理解,理解Linux下的CPU信息:lscpu cpuinfo
- mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL
- 单片机外设基本概念_单片机基本概念
- 计算机网络讨论课感悟,计算机网络课程学习心得体会
- C# 关于yield return的研究(转载)
- 【免费下载】全网最全5G资料包(报告、白皮书、方案、政策等1300余份,持续更新)...
- 附录-实模式下1M内存
- 泛函分析 第二章 线性算子与线性泛函
- 网络安全工程师视频教程从入门到精通学习_网络安全入门教程
- chrome os 安装手册
- Go 语言开发工具 LiteIDE X36 发布
- error C2065: “pair”: 未声明的标识符
- 20192132055 李欣桐第二次作业
- 商务通“隐形手机”牛皮轰轰可以休矣!
- 依照测试用例分类(按功能)的结果生成对应的universe文件
- 【登录时验证码一直错误】阿里云SLB负载均衡,如何session共享
- Oracle EBS Concurrent Request:Gather Schema Statistics
热门文章
- 5G直播设备 VR+5G直播 4K+5G直播
- win10启动linux蓝屏,系统之家重装 win10启动蓝屏0xc000021a如何修复
- torch实现自编码器_Pytorch-自编码器与变分自编码器
- 变分自编码器(VAE,Variational Auto-Encoder)
- 树莓派c语言人脸识别,树莓派实现简单的人脸识别
- 软件工程——读书笔记(八/九/十)
- linux不解压查看gz文件内容,linux下如何不解压tar.gz文件查看其中的文件大小
- linux桌面版拨号连接,linux中的pppoe拨号上网
- 基于Andriod的连锁药店管理系统APP-计算机毕业设计
- windows光盘修复计算机,windows光盘修复电脑