索引---B+Tree

1.索引的介绍

  • MySQL 索引:是帮助 MySQL 高效获取数据的一种数据结构。所以,索引的本质就是数据结构!
  • 在表数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
  • 有索引和无索引的情况比较
  • 作用:提高查询效率

2.索引的分类

<1>按照功能分类

普通索引:最基本的索引,没有任何限制。

唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值组合必须唯一。

主键索引:一种特殊的唯一索引,不允许有空值。在建表时有主键列同时创建主键索引。

联合索引:顾名思义,就是将单列索引进行组合。

外键索引:只有 InnoDB 引擎支持外键索引,用来保证数据的一致性、完整性和实现级联操作。

全文索引:快速匹配全部文档的方式。InnoDB 引擎 5.6 版本后才支持全文索引。MEMORY 引擎不支持。

<2>按照结构分类

BTree 索引:MySQL 使用最频繁的一个索引数据结构,是 InnoDB 和 MyISAM 存储引擎默认的索引类型,

底层基于 B+Tree 数据结构。

Hash 索引:MySQL 中 Memory 存储引擎默认支持的索引类型。

3.索引的创建/查看/删除

<1>主键和外键的创建本质就是索引的创建,会产生对应的索引

查询student表中的索引 (主键列自带主键索引)
在这里插入图片描述查询db4数据库中的product表 (外键列自带外键索引)
在这里插入图片描述

<2>创建索引

-- 1. 创建索引的语法:
CREATE  [UNIQUE][FULLTEXT]  INDEX  索引名称  [USING 索引类型]  ON  表名称(列名称....);-- 2. 案例代码:
-- 为 student 表当中的 name 列创建一个普通的索引。
CREATE  INDEX  idx_name  ON  student(name);
-- 为 student 表当中的 age 列创建一个唯一索引。
CREATE  UNIQUE  INDEX  idx_age  ON  student(age);

<3>查看索引

-- 1. 查看索引的语法:
SHOW  INDEX   FROM  表名称;-- 2. 案例代码: 查询学生表当中,拥有的索引
SHOW  INDEX  FROM  student;

<4>添加索引

-- 1. 普通索引
ALTER  TABLE  表名称  ADD  INDEX  索引名称 (列名);
-- 2. 组合索引
ALTER  TABLE  表名称  ADD  INDEX  索引名称 (列名1,列名2,列名3....);
-- 3. 主键索引
ALTER  TABLE  表名称  ADD  PRIMARY  KEY  (主键列名称);
-- 4. 外键索引
ALTER  TABLE  表名称  ADD  CONSTRAINT  外键名称  FOREIGN  KEY  (本表外键列名)  REFERENCES  主表名称(主键列名);
-- 5. 唯一索引
ALTER  TABLE  表名称  ADD  UNIQUE  索引名称(列名);
-- 6. 全文索引
ALTER  TABLE  表名称  ADD  FULLTEXT  索引名称(列名);

<5>删除索引

-- 1. 基础语法
DROP  INDEX  索引名称  ON  表名称;

<6>索引的使用

  • 索引创建成功后,再次查询带有索引的列,则它的效率会提高【查询时间变短】

4.索引的原理[面试]

原理: 磁盘存储 B+Tree

<1>磁盘存储特点

  • 系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的。
  • 位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。
  • InnoDB 存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB 存储引擎中默认每个页的大小为 16KB。
  • InnoDB 引擎将若干个地址连接磁盘块,以此来达到页的大小 16KB,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,这将会减少磁盘 I/O 次数,提高查询效率。

<2>BTree数据结构
特点:每个节点中不仅包含 key 值,还有数据。会增加查询数据时磁盘的 IO 次数
在这里插入图片描述
<3>B+Tree数据结构
特点:非叶子节点只存储 key 值,所有数据存储在叶子节点,所有叶子节点之间都有连接指针
好处:提高查询速度,减少磁盘的 IO 次数,树型结构较小
在这里插入图片描述
<4>原理总结

  • BTree树的所有的节点都保存地址和数据,在检索/查询的过程中会读取到各个节点上的数据,从而产生了很多不必要的IO操作。B+Tree树的非叶子节点只存储地址不存储数据,所有的数据都保存在叶子节点上,在检索/查询的过程中对于非叶子节点不会读取数据,减少了IO操作,所以能提高查询效率。

5.创建索引的原则

  1. 对查询频次较高,并且数据量比较大的表,建立索引。
  2. 使用唯一索引,区分度越高,使用索引的效率越高。
  3. 索引字段的选择,最佳候选列应当从 WHERE 子句的条件当中提取
  4. 如果 WHERE 子句当中的条件组合比较多,那么应当挑选最常用的、过滤效果最好的列组合
  5. 索引虽然可以有效的提升查询数据的效率,但是并不是多多益善。

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

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

相关文章

nginx应用领域分类+事件模型

【1】nginx应用领域分类&#xff1a; 类1&#xff1a;nginx反向代理与负载均衡类网站应用&#xff1b; 类2&#xff1a;nginx php/jsp 类网站应用&#xff1b; 类3&#xff1a;nginx静态内容web服务器应用&#xff1b; 【2】F5 指的是 BIG-IP 硬件 四/七层负载均衡交换机&a…

接口限流算法:漏桶算法amp;令牌桶算法

转载自 接口限流算法&#xff1a;漏桶算法&令牌桶算法背景 每一个对外提供的API接口都是需要做流量控制的&#xff0c;不然会导致系统直接崩溃。很简单的例子&#xff0c;和保险丝的原理一样&#xff0c;如果用电符合超载就会烧断保险丝断掉电源以达到保护的作用。API限流的…

索引失效的场景(面试)

1.where条件中有or关键字 -- 创建组合索引 CREATE INDEX idx_name ON student(NAME,age); -- 查询 SELECT COUNT(*) FROM student WHERE NAMEjack666; -- 命中索引 SELECT COUNT(*) FROM student WHERE NAMEjack666 and age666; -- 命中索引 SELECT COUNT(*) FROM student WH…

nginx负载均衡与反向代理

【1】负载均衡 1&#xff09;问题&#xff1a;如何在多个网络设备或服务器之间实现合理的业务量分配&#xff0c;使之不会出现一台设备过忙&#xff0c;而其他设备却没有充分使用的情况。2&#xff09;解决方法&#xff1a;要解决这一问题&#xff0c;可以采用负载均衡的方法&a…

JDBC入门案例及相关API概述

1 JDBC概念 问题&#xff1a;JDBC的本质是什么&#xff0c;解决了什么问题&#xff1f; 2.API讲解 <1> DriverManager的作用 问题&#xff1a;DriverManager有什么作用&#xff1f; 作用一&#xff1a;注册驱动 DriverManager.registerDriver(new Driver())&#…

Spring Boot国际化支持

转载自 Spring Boot国际化支持本章将讲解如何在Spring Boot和Thymeleaf中做页面模板国际化的支持&#xff0c;根据系统语言环境或者session中的语言来自动读取不同环境中的文字。 国际化自动配置 Spring Boot中已经对国际化这一块做了自动配置。 国际化自动配置类&#xff1a;o…

http响应状态码列表

1&#xff09;响应状态码用于表示服务器对请求的各种不同处理结果和状态&#xff1b; 2&#xff09;响应状态码分为5类&#xff1a;类1&#xff09;100~199&#xff1a;表示成功接收请求&#xff0c;要求客户端继续提交下一次请求才能完成整个处理过程&#xff1b;类2&#xff…

Spring Boot整合Thymeleaf模板引擎

转载自 Spring Boot整合Thymeleaf模板引擎什么是Thymeleaf Thymeleaf是一款用于渲染XML、XHTML、HTML5内容的模板引擎。类似Velocity&#xff0c;FreeMaker模板引擎&#xff0c;它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。 Thymeleaf也是Spring Boot首…

JDBC的SQL注入漏洞

1.概念&#xff1a; 利用sql语句的漏洞来对系统进行攻击&#xff0c;导致数据泄露 2.案例演示 数据库登录表&#xff1a; 模拟登录代码【输入正确的用户名和密码才能打印出用户信息】 public class SQL注入 {public static void main(String[] args) {login( " or 1…

JVM运行时区域详解

转载自 JVM运行时区域详解我们知道的JVM内存区域有&#xff1a;堆和栈&#xff0c;这是一种泛的分法&#xff0c;也是按运行时区域的一种分法&#xff0c;堆是所有线程共享的一块区域&#xff0c;而栈是线程隔离的&#xff0c;每个线程互不共享。 线程不共享区域 每个线程的数据…

JDBC事务管理

1 事务概念 一组SQL操作要么同时成功要么同时失败。 2 JDBC事务操作的API 管理事务的功能类:Connection conn.setAutoCommit(false); //设置自动提交为false就表示开启事务 conn.commit(); //提交事务 conn.rollback();//回滚事务3.代码举例 需求&#xff1a;批量添加员工…

吃透这套架构演化图,从零搭建Web网站也不难

转载自 吃透这套架构演化图&#xff0c;从零搭建Web网站也不难 前言工作也有几多年了&#xff0c;无论是身边遇到的还是耳间闻到的&#xff0c;多多少少也积攒了自己的一些经验和思考&#xff0c;当然&#xff0c;博主并没有太多接触高大上的分布式架构实践&#xff0c;相对比较…

书写JDBC工具类

1 将哪些操作抽取到工具类中 为什么要抽取工具类&#xff1f; 我们在执行CRUD的过程中&#xff0c;有太多的重复代码需要写&#xff0c;例如&#xff1a;注册驱动、获取连接、释放资源【可以优化dao层的代码】 1 加载properties配置文件&#xff0c;获取连接数据库的相关参数&…

完整的MIME类型列表

转自&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types 这是一份比较全面的MIME类型列表&#xff0c;关联了文档的类别&#xff0c;以它们常见的扩展名排序。两种主要的MIME类型在默认类型中扮演了重要的…

大众点评Java开发实时应用监控平台-CAT

转载自 【推荐】大众点评Java开发实时应用监控平台-CATCAT介绍 CAT是基于Java开发的实时应用监控平台&#xff0c;包括实时应用监控&#xff0c;业务监控。 CAT作为大众点评网基础监控组件&#xff0c;它已经在中间件框架&#xff08;MVC框架&#xff0c;RPC框架&#xff0c;数…

第三方连接池

1 连接池的概念和作用 问题&#xff1a;连接池的本质是什么&#xff1f;有什么作用&#xff1f; 概念&#xff1a;连接池的本质就是一个容器&#xff0c;该容器中会初始化一些Connection对象&#xff0c;我们程序只需要从连接池中获取连接&#xff0c;使用完毕之后归还连接即…

think-in-java(9)接口

【9】接口 【9.1】抽象类和抽象方法1&#xff09;抽象方法&#xff1a;仅有方法声明而没有方法体&#xff1b;由abstract 修饰的方法&#xff1b;2&#xff09;抽象类&#xff1a;如果一个类包含一个或多个抽象方法&#xff0c; 则该类声明为抽象类&#xff0c;由 abstract修饰…

Spring Boot日志集成

转载自 Spring Boot日志集成Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架&#xff0c;如果你使用starters启动器&#xff0c;Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架&#xff0c;Spring Boot都支持配置将日志输…

三大设计模式

1. 装饰者设计模式 <1>解决的问题&#xff1a;在不改变原有类方法源代码的情况下给方法进行增强&#xff0c;在实现的方法中调用原有对象的对应方法&#xff0c;也可对原有方法进行增强。 <2>要求&#xff1a;要实现接口的所有方法。 <3>弊端&#xff1a;…

硬盘与存储设备

转自鸟哥&#xff1a; http://cn.linux.vbird.org/linux_basic/0105computers_2.php#pc_hd 【1】基本概念 实际的数据都是写在具有磁性物质的磁碟盘上头&#xff0c;而读写主要是透过在机械手臂上的读取头(head)来达成。 实际运作时&#xff0c; 主轴马达让磁碟盘转动&#x…