当前位置: 首页 > news >正文

MySQL-索引基础

文章概要

本篇文章通过几个问题来了解MySQL中索引相关的概念。平时在学习MySQL时或多或少都听说过索引的概念,但是索引到底是个什么东西,可能还不是非常的清楚。

正文

1. 什么是索引?

索引,在MySQL中也称为键(key),是存储引擎用于快速查找记录的一种数据结构。

2. 索引有哪些类型?

  1. B-Tree索引
    索引对于多个值进行排序的依据是CREATE TABLE语句中定义索引时列的顺序。

  2. 全文索引
    FULLTEXT是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值

3. B-Tree索引适用于哪些类型的查找?

  1. 全值匹配(或者说精准匹配,查询的列和索引列完全匹配)
  2. 匹配最左前缀(下面的几种都遵循这一原则)
  3. 匹配列前缀
  4. 匹配范围值
  5. 精确匹配某一列而范围匹配另外一列
  6. 只访问索引的查询

4. 什么情况下索引会失效?

  1. 如果不是按照索引的最左列开始查找,则无法使用索引。
    就是说不能跳过索引中字段起始左边几列而直接使用后面的值来进行匹配。
  2. 不能跳过索引中的列。
    和上面不同,这种情况下是使用了左边的几列,但是后面跳过几列后继续使用后面的几列来进行查询,此时存储引擎只能利用从左边开始的几列索引来进行匹配。
  3. 如果查询中有某列的范围查询,则其右边所有列都无法使用索引优化查找。

由此可见,在创建索引列时,索引的顺序至关重要,关系到后面的查询是否能够充分利用索引。

另外在这里打个问号(?),为什么这些情况下会造成某些索引列失效?

5. 使用索引有哪些优点?

  1. 索引大大减少了服务器需要扫描的数据量
  2. 索引可以帮助服务器避免排序和临时表
  3. 索引可以将随机I/O变为顺序I/O

总结

本篇文章通过5个问题来简单了解索引是什么,为什么会有索引,使用索引有哪些优势。对于文章中提到的一些概念,后面会随着学习的深入,逐步涉及,比如学习B-Tree(实际上InnoDB引擎使用的B+树,因为B树将实际的记录存到到节点中,这会占用更多的内存,另外B树是多路平衡查找树,过多平衡树的操作也会带来更多的开销。)

希望你能从本篇文章学习到一些新的东西。

参考

《高性能MySQL(第四版)》

http://www.lryc.cn/news/117711.html

相关文章:

  • CentOS中自动加载802.1q模块
  • CSP-J2022第一轮试题
  • 使用Java根据表名导出与导入Sql
  • Elasticsearch同时使用should和must
  • 羽毛球热身和拉伸
  • 使用 Vue 实现页面访问拦截
  • 使用webpack建立React+TS项目
  • 法律监督大数据平台有什么作用?
  • 根据制定的长度切割list值
  • AES加密(1):AES基础知识和计算过程
  • Nginx启动报错- Failed to start The nginx HTTP and reverse proxy server
  • 五、web应用程序技术——web功能
  • AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤
  • c++ boost库之scoped_ptr,shared_ptr,weak_ptr智能指针
  • 【leetcode】383. 赎金信(easy)
  • CTF-记一次PWN练习
  • 《golang设计模式》第一部分·创建型模式-04-工厂方法模式(Factory Method)
  • redis的配置和使用、redis的数据结构以及缓存遇见的常见问题
  • 在Ubuntu系统下修改limits.conf不生效
  • selenium 选项 chrome_options
  • 自然语言处理(Natural Language Processing,NLP)
  • 基于机器学习的库存需求预测 -- 机器学习项目基础篇(12)
  • 【D3S】集成smart-doc并同步配置到Torna
  • 网络安全设备及部署
  • LVS集群
  • Kubernetes(K8s)从入门到精通系列之十二:安装和设置 kubectl
  • 探索 TypeScript 元组的用例
  • Pytorch使用NN神经网络模型实现经典波士顿boston房价预测问题
  • 微服务间消息传递
  • python——案例16:约瑟夫生者死者链队列