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中索引的作用相关推荐

  1. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  2. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...

  3. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  4. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  5. mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...

  6. 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明

    复合索引 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排序的.现 ...

  7. mysql分页总页数算法解析_详解MySQL的limit用法和分页查询语句的性能分析

    limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT ...

  8. python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...

    __new__: 对象的创建,是一个静态方法,第一个参数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是sel ...

  9. python中字典和json的区别_详解python中的json和字典dict

    定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...

最新文章

  1. 四连通,和八连通的详解(MATLAB)
  2. 关于DiscuzNT 1.0
  3. C/C++ 笔试、面试题目大汇总
  4. linux的cpu信息怎么理解,理解Linux下的CPU信息:lscpu cpuinfo
  5. mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL
  6. 单片机外设基本概念_单片机基本概念
  7. 计算机网络讨论课感悟,计算机网络课程学习心得体会
  8. C# 关于yield return的研究(转载)
  9. 【免费下载】全网最全5G资料包(报告、白皮书、方案、政策等1300余份,持续更新)...
  10. 附录-实模式下1M内存
  11. 泛函分析 第二章 线性算子与线性泛函
  12. 网络安全工程师视频教程从入门到精通学习_网络安全入门教程
  13. chrome os 安装手册
  14. Go 语言开发工具 LiteIDE X36 发布
  15. error C2065: “pair”: 未声明的标识符
  16. 20192132055 李欣桐第二次作业
  17. 商务通“隐形手机”牛皮轰轰可以休矣!
  18. 依照测试用例分类(按功能)的结果生成对应的universe文件
  19. 【登录时验证码一直错误】阿里云SLB负载均衡,如何session共享
  20. Oracle EBS Concurrent Request:Gather Schema Statistics

热门文章

  1. 5G直播设备 VR+5G直播 4K+5G直播
  2. win10启动linux蓝屏,系统之家重装 win10启动蓝屏0xc000021a如何修复
  3. torch实现自编码器_Pytorch-自编码器与变分自编码器
  4. 变分自编码器(VAE,Variational Auto-Encoder)
  5. 树莓派c语言人脸识别,树莓派实现简单的人脸识别
  6. 软件工程——读书笔记(八/九/十)
  7. linux不解压查看gz文件内容,linux下如何不解压tar.gz文件查看其中的文件大小
  8. linux桌面版拨号连接,linux中的pppoe拨号上网
  9. 基于Andriod的连锁药店管理系统APP-计算机毕业设计
  10. windows光盘修复计算机,windows光盘修复电脑