首页 > 数据库 >MySQL-索引

MySQL-索引

时间:2022-08-25 10:57:39浏览次数:49  
标签:结点 Tree 叶子 索引 查找 MySQL 节点

为什么需要索引?

定义:索引是一个列或多个列进行排序的数据结构

作用:索引能大幅提高查找效率

缺点:创建和更新索引会耗费 空间和时间

查找结构进化

一个个找:实现简单:太慢
二分查找:有序:简单:要求是有序的,插入特别慢
HASH:查询快 ;占用空间;不太适合存储大规模数据
二叉查找树bst :插入和查询很快(log(n):无法存大规模数据,复杂度退化
平衡树:解決bst 退化的问题,树是平衡的;节点非常多的时候,依然树高很高
多路查找树:一个父亲多个孩子节点(度);节点过多树高不会特别深,
多路平衡查找树- B-Tree

B-Tree多路平衡查找树

定义:

  • 每个结点最多有m个孩子结点,m>=2
  • 叶子结点有相同的深度
  • 节点中的key从左到右递增

B+-Tree

改进B-Tree

  • 所有叶子结点包含全部关键字信息及指向相关记录的指针
  • 相邻叶子结点被双向指针相互链接起来(支持顺序查找,范围查找)
  • 非叶子节点只存一个最值和一个指向子节点的指针

不是阶越大越好

  • 磁盘块的大小来确定B+Tree的叶子节点的大小

索引类型

  • 普通索引 CREATE INDEX
  • 唯一索引 CREATE UNIQUE INDEX
  • 多列索引
  • 主键索引 PRIMARY KEY
  • 全文索引(INNODB不支持),倒排索引实现

什么时候创建索引?

  • 经常用作where条件的字段
  • 经常用作表连接
  • 经常出现在order by 、group by后面的

创建索引注意点

  • NOT NULL, 空值B+Tree很难做比较
  • 区分度高,离散度大的字段,太多相同的值比较浪费时间
  • 索引长度最好不要太长

索引什么时候失效

1.模糊匹配

%like语句,模糊搜索

2.隐式类型转换(python动态语言)

go/python中的类型和数据库类型不一样不好比较

3.联合索引没有满足最左原则

总结:key无法满足B+Tree的没有办法直接比较的时候索引就会失效

聚集索引和非聚集索引

聚集索引(INNODB):
  • B+Tree叶子结点存储的是表数据,如:主键索引,一个文件保存数据表和索引

  • 其他列作为辅助索引:B+Tree存储的是 主键值,再通过主键找数据

非聚集索引(MYisam):
  • B+Tree叶子结点存储的是指向数据的指针,多个文件(一个是存储索引B+Tree, 一个文件存储数据表)

排查’慢查询‘

通常是,缺少索引,索引字段不合理,业务代码导致

  • 开启慢查询日志,并查看
  • 通过explain排查索引问题
  • 比如 数据类型不匹配导致全表扫描,数据太多分页查询

MYsql连接语句

inner join

left join / right join

Full join (mysql不支持), 可以用union联合左链接和右链接

标签:结点,Tree,叶子,索引,查找,MySQL,节点
From: https://www.cnblogs.com/aleiyoy/p/16623512.html

相关文章

  • 统信 UOS Server 20 修改 MySQL 数据目录(datadir)
    一、环境说明操作系统:UnionTechOSServer20Enterprise数据库:MySQL5.7注1:统信UOS查看系统版本方式#方式一,查看发行版信息cat/etc/os-release#方式二,查看......
  • MySQL分区介绍与使用
    一、MySQL分区创建 MySQL创建方式一共有四种:range、list、hash和key。1.range(官方文档)1.1intcreatetablestaff(idint(32)notnull,code_varchar(30),......
  • 学习:python操作mysql(一)
    1、安装mysql,这里我大哥提供给我的是解压版的安装包为了防止自己以后忘了记录一下安装方式第一步将安装包解压到提前准备好的文件夹内  第二步配置环境变量path......
  • mysql8.0.30zip压缩版的下载和安装
    1.首先进入官网下载地址:https://dev.mysql.com/downloads/mysql/ 2.接着选好操作系统,下载上面箭头所示的zip版本。 3.将下载好的压缩包解压出来,我的路径是:F:\mys......
  • MySQL数据库忘记root密码
    在Linux系统中MySQL数据库的root密码忘记后,我们可以通过修改配置文件的方式先跳过密码的方式跳过密码登录MySQL数据库,后在数据库中再进行修改密码。1.修改MySQL配置文......
  • Centos7 安装 Mysql
    Centos7安装Mysql资料链接:https://pan.baidu.com/s/1TTZY1qSYNj0TC7eAlA-qsA?pwd=jjjj提取码:jjjj准备本文通过rpm,进行MySQL数据库的安装,主要的步骤如下:1).检......
  • Mysql蜜罐读取电脑配置文件
    关于Mysql蜜罐的具体技术细节,网上文章介绍的太多了,大家可以自己从网上搜索文章,我写一个简介吧:mysql中有一个loaddatalocalinfile函数能够读取本地文件到mysql数据库中。......
  • 分布式搜索引擎01
    Mysql: 关系型数据库:数据在存储时数据和数据之间有一定的关联关系存储介质(存储位置):硬盘优点:不会导致数据丢失,有事务控制 缺点:执行消息低事务......
  • 学长告诉我,大厂MySQL都是通过SSH连接的
    大家好,我是咔咔 不期速成,日拱一卒一、背景之前待的几个公司,数据库、服务器权限都是给所有后端直接拉满的,但也会出现员工离职的情况,每次有人离职时都需要改数据库密码、......
  • MySQL索引连环问
    MySQL索引连环问什么是索引?索引类似于书本的目录,是存储引擎用于提高数据库表的访问速度的一种数据结构。数据是存储在磁盘上的,查询数据时,如果没有索引,会加载所有的数据......