索引

参考:https://zhuanlan.zhihu.com/p/78982303

1. 概念

索引其实是一种排序的数据结构,能够帮助我们快速的检索数据库中的数据。索引建立经常使用的字段上(不仅仅是经常作为where条件的字段)

  • 优点:索引可以提高查询的速度,但是创建和维护索引需要耗费时间,
  • 缺点:索引会影响插入的速度,如果需要插入大量的数据时,最好是先删除索引,插入数据后再建立索引。

2. 分类

  • index ---- 普通索引,数据可以重复,没有任何限制。
  • unique ---- 唯一索引,要求索引列的值必须唯一,但允许有空值;如果是组合索引,那么列值的组合必须唯一。
  • primary key ---- 主键索引,是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般是在创建表的同时创建主键索引。
  • 组合索引 ---- 在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。
  • fulltext ---- 全文索引,是对于大表的文本域:char,varchar,text列才能创建全文索引,主要用于查找文本中的关键字,并不是直接与索引中的值进行比较。fulltext更像是一个搜索引擎,配合match against操作使用,而不是一般的where语句加like。
    注: 全文索引目前只有MyISAM存储引擎支持全文索引,InnoDB引擎5.6以下版本还不支持全文索引
    所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节,索引有两种存储类型,包括B型树索引和哈希索引。

3. 两种索引类型

3.1 hash索引

  • 把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。
  • 哈希索引适合等值查询,但是无法进行范围查询
  • 在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题(如果键值不是唯一的,需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;)
  • 哈希索引也不支持多列联合索引的最左匹配规则

3.2 B+树索引
参考:https://blog.csdn.net/guanghuichenshao/article/details/81948438

聚簇索引和非聚簇索引,在查询数据的区别

聚簇索引,就是将索引和数据放到一起,找到索引也就找到了数据,我们刚才看到的B+树索引就是一种聚簇索引。InnoDB引擎使用B+Tree作为索引结构(聚簇索引)

非聚簇索引就是将数据和索引分开,查找时需要先查找到索引,然后通过索引回表找到相应的数据。MyISAM引擎使用B+Tree作为索引结构(非聚集)

B+ Tree的叶子节点都可以存哪些东西

B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大

4. 生效条件

  • 不跨列:对于复合索引(a,b, c),不要跨列或无序使用(最左匹配原则,a and c,a生效,c不生效;b and c,都不生效)。尽量使用全索引匹配(a,b,c)
  • 不用不等号和is null: 对于复合索引(a,b, c),复合索引不能使用不等于(!= <>)或is null (is not null),否则自身以及右侧所有全部失效。(a and b > 5 and c,a和b生效,c不生效)
  • 不使用or:尽量不要使用or,否则索引失效(or左侧的字段失效)
  • 不进行运算:不要在索引上进行任何操作(计算、函数、类型转换),否则索引失效
  • 不进行类型转换:尽量不要使用类型转换(显示、隐式),否则索引失效
  • like不要以’%'开头:模糊查询时,使用%匹配时:’a%‘会使用索引,’%a‘不会使用索引, 这也是最左前缀匹配原则

尽量使用索引覆盖(using index)(a,b,c)

   select a,b,c from xx..where a=  .. and b =.. ;

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B_TREE 索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

mysql积累--索引相关推荐

  1. mysql性能优化较佳实践_MySQL性能优化的21个最佳实践 和 mysql使用索引

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  2. ySQL性能优化的21个最佳实践 和 mysql使用索引

    MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 ...

  3. 面试官问:为什么MySQL的索引不采用Kafka的索引机制

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 第一眼看到这个问题,也是很迷惑的,谁没事会问这种问题.然而,事实上 ...

  4. 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/exC8JdQS InnoDB的一棵B+树可以存放多少行数 ...

  5. 为了把mysql的索引底层原理讲清楚,我把计算机翻了个底朝天

    来自:非科班的科班 什么是索引 概念:索引是提高mysql查询效率的数据结构.总的一句话概括就是索引是一种数据结构. 数据库查询是数据库的最主要功能之一.设计者们都希望查询数据的速度能尽可能的快,因此 ...

  6. mysql多索引结构_MySQL 索引结构

    谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...

  7. mysql repair 索引_mysql 创建索引、重建索引、查询索引、删除索引 转自:http://www.phpernote.com/mysql/942.html...

    本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引.重建索引.查询索引.删除索引的操作.以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,c ...

  8. mysql简单索引_mysql简单索引

    mysql的索引是在存储引擎实现的,而不是在服务器层,因此不是标准的. b-tree: 大部分的mysql支持b-tree索引,archive知道mysql5.1才支持,而且仅仅是支持单个auto_i ...

  9. mysql单列索引和多列索引_mysql 单列索引与多列索引

    以下的文章主要介绍的是MySQL数据库索引类型,其中包括普通索引,唯一索引,主键索引与主键索引,以及对这些索引的实际应用或是创建有一个详细介绍,以下就是文章的主要内容描述. (1)普通索引 这是最基本 ...

最新文章

  1. 综合技术 --@Autowired和@Resource
  2. OpenStack部署
  3. linux高通平台代码,高通linux系统初始化
  4. Boost:是否支持sse4.1指令的测试程序
  5. 计算机运维知识题库,(哭求哥哥姐姐帮助一下)计算机维护笔试题库(辛苦了)...
  6. Visual Studio 2022发布了,我最爱的5大特性
  7. .NET Core开发日志——OData
  8. bagging算法_集成学习(Ensemble Learning)——Bagging与Random Forest(1)
  9. 清华2018顶级数据团队建设全景报告发布:Python最受欢迎,C语言含金量最高
  10. 【Python】BeautifulSoup导入lxml报错
  11. 初一数学教材人教版_【期中试卷+知识点总结】初中初一初二初三年级各科期中试卷+知识点总结...
  12. PHP上传图片重命名6种方案
  13. [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
  14. 线程池(ThreadPoolExecutor ) 的 创建、关闭、监控
  15. OkHttp Interceptors(二)
  16. batchplot插件用法_batchplot批量打印怎么用?Batchplot(CAD批量打印工具)安装步骤
  17. 判断数是否为素数与素数输出
  18. 小学计算机输入法主题教研设计,《拼音输入法》教学设计.doc
  19. 行驶证OCR识别360度全面解析
  20. java 多线程(三)

热门文章

  1. 如何查询大量DHL国际快递物流轨迹、签收情况
  2. 服务器搭建hue_Hue安装配置实践
  3. PHP学习-3 端口开放
  4. 一款真正可用的支付系统,可搭建自己的易支付系统,开源无后门可运营
  5. 2009-2019年亚马逊畅销书50强数据集可视化分析-基于Pandas-Seaborn
  6. 在python中请求百度easyDL
  7. Android输入法方法,Android的输入法系统框架原理
  8. vsftpd failed - probably invalid config.
  9. 如何使用matlab进行频域分析
  10. 软件的「向前兼容」和「向后兼容」