首页 > 数据库 >mysql之索引

mysql之索引

时间:2022-12-29 22:55:35浏览次数:56  
标签:存储 聚集 查询 索引 引擎 mysql 节点

索引是什么?

索引是存储引擎用于快速找到记录的一种数据结构或存储结构,目录就是经典的索引。

索引的分类

数据结构分类:B+树索引,哈希索引,全文索引

存储方式分类:聚簇索引,非聚簇索引

mysql的存储引擎

储存引擎指的是表的类型。功能即接受上层传下来的命令,对比表中的数据进行读取或写入操作,操作对象为表而非数据库。

常用的有Innodb,Mylsam,memory,csv,archive等

  • Innodb:mysql5.5.8开始为默认的存储引擎,支持事务,行锁设计,外键。支持B+树索引,全文索引。(最常用)
  • mylsam:之前的默认引擎,不支持事务
  • memory:将数据文件放到内存,支持哈希索引。系统重启或崩溃后数据丢失。
  • csv:数据存储为csv格式
  • archive: 只支持insert,select。使用zlib压缩算法,压缩比为1:10。用于归档数据
什么是B+树?

B+树是平衡搜索树。一般高三层。

节点分为内部节点和叶子节点两种,所有内部节点都是叶节点的副本。

B树区别于B+树,B树所有节点都存储记录值。

B+树

聚集索引为主键索引,以主键的值作为键,在第三层存储着所有记录

非聚集索引以建立索引的所有值为键,在第三层存储着主键值,查询非聚集索引获取记录需要进行回表查询主键的B+树获取记录。如果只是查询并且条件中只包括非聚集索引,那么则称之为覆盖索引,不需要进行回表。

为什么不像聚集索引一样存储记录,而是采取回表呢?

多处储存值,需要维护数据的一致性,并且浪费存储空间

为什么储存的是主键值,而不是存储物理位置呢?

因为B+树进行插入删除的更新操作会影响储存位置,那么就需要维护多个非聚集索引的数据一致性了。

B+树支持等值,前缀模糊查询,范围值查询,不支持后缀模糊查询。因为索引有效建立在有序的前提下,而字符串是采取字典序从前往后排序,因此不支持后缀模糊查询

设置内存缓存提高查询速度

因为内存与硬盘的速度不是一个量级,那么可以采取增大缓冲池,一次性加载数据索引,提高速度

set global innodb_buffer_pool_size = value#重启/崩溃后失效恢复为my.ini的默认值

或者修改my.ini配置进行修改,永久性

全文索引的使用

https://blog.csdn.net/mrzhouxiaofei/article/details/79940958

标签:存储,聚集,查询,索引,引擎,mysql,节点
From: https://www.cnblogs.com/zhoumu/p/17013746.html

相关文章

  • K3S+MySQL
    K3S+MySQL先更新apt-getsudoapt-getupdate下载curlsudoaptinstallcurl安装dockercurl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun......
  • mysql的libtinfo.so.5,libncurses.so.5报错
    MySQL采用的是Linux-Generic包安装,但是到了连接服务的时候却报错了find/-name"libtinfo*"解决办法:ln-s/usr/lib64/libtinfo.so.6/usr/lib64/libtinfo.so.5find/......
  • 二进制部署mysql
    下载二进制格式的软件包mysql包位置:(https://downloads.mysql.com/archives/community/) #下载地址mysql选择5.7.39版本linux64位 https://cdn.mysql.com/archive......
  • MySQL CEIL() 函数,向上取整
    MySQLCEIL()函数MySQLCEIL()函数返回大于或等于指定数字的最小整数值。CEIL()函数等同于CEILING()函数。如果您想要返回小于或等于指定数字的最小整数值,请使用FL......
  • mysql coalesce函数
    Mysqlcoalesce()函数认识和用法想必大部分的人都是第一次使用吧!对,我也是刚刚在工作中看到了,所以有兴趣来研究下。coalesce()解释:返回参数中的第一个非空表达式(从左向右......
  • Mysql使用varchar或者tinyint表示枚举性能差异
    当我们需要在数据库中表示枚举时,一般有两种常见的方式:varchar或者tinyint。两种方式各有各的拥趸,支持varchar者认为性能差异不大,varchar可读性好得多。支持tinyint者则认为......
  • mysql中的IF表达式
    IF表达式IF(expr1,expr2,expr3);如果expr1为TRUE,则IF()返回值为expr2,否则返回值为expr3updatesalarysetsex=if(sex='男','女','男')这是leetcode上的一道题,将sal......
  • 开心档-软件开发入门之MySQL 数据类型
    ......
  • 开心档-软件开发入门之MySQL 导出数据
    ......
  • 开心档-软件开发入门之MySQL 导入数据
    ......