首页 > 数据库 >Mysql——索引

Mysql——索引

时间:2022-08-25 21:37:45浏览次数:62  
标签:提取 聚集 索引 Mysql 辅助 主键 block

索引

1. 建立起一个在存储表阶段就有的一个存储结构能在查询的时候加速。

2. 提高读的速度,降低写的速度。

3. 读写比例为10:1

索引原理:

因软件时听过操作系统来进行对硬盘的读取工作(硬盘7200转,表示每分钟硬盘转7200圈)如果软件每次提取数据都只提取一点(像提取文件,每次只提取一行),那么系统和硬盘的负载会非常大(硬盘提取一般会花费0.095ms时间完成,这时间如果让CUP运行它会运行50000条CPU指令或10000条的python语句),所以操作系统会将后续的数据进行预读。所提取的大小称之为block块,一个块为4096字节,windows一般提取2个block块,mysql提取4个block块。

数据库的树形数据结构:

树形结构是指数据库在存储数据时,以特定关键值为中心进行向下扩散,以切割的方式将数据切割成最直接,最方便,耗费最小block块将数据进行提取。

1. 由根(root),分支(branch),叶子(leaf)构成

2. 根和叶子是必须有的

3. 只能有一个根和一层叶子,可以有多层分支。

4. 叶子为最外层结构

5. 树的高度是指数结构的层数。

 

数的层数决定了block块提取的速度,所以再基本树的情形下,发展出来b+树,尽量让层数控制在3层以内。

平衡树,B+树

1. 分支节点和根节点都不在存储实际的数据了,让分支和根节点能存储更多的索引信息,就降低了数的高度。

2. 在叶子节点之间加入了双向的链式结构,方便在查询中可以平向查找。

mysql当中所有b+树索引的高度都基本控制在3层,这样使得提取block块是大大节省了提取速度。让读取速度飞起来

聚集索引和辅助索引:

聚集索引:

1. 聚集索引只存放设置为主键的关键信息,因此每张表中只能由一个聚集索引,primery key 自动生成聚集索引,非空,唯一

2. 在innodb中,聚集索引和辅助索引并存,即设置主键的为聚集索引,而非主键的为辅助索引。

3. 聚集索引数据直接存储在树结构的叶子节点中。

4. 纪录的索引顺序与无力顺序相同因此更适合between and和order by操作

辅助索引:

1. 叶子节点除了包含键值以外,还包含了一个书签(bookmark),该书签告诉innoDB去哪个区域来进行数据的提取

2.myisam中只有辅助索引,没有聚集索引,所以它有3张表。

3. 每张表可以有多个非聚集索引,需要更多磁盘和内容多个索引会影响insert和update的速度

innoDB使用聚集索引和辅助索引:

辅助索引的存在并不影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引,但只能有一个聚集索引。当通过辅助索引来寻找数据时,InnoDB存储引擎会遍历辅助索引并通过叶子级别的指针获得只想主键索引的主键,然后再通过主键索引来找到一个完整的行记录。

索引的配置:

1. primary key主键,自动生成聚集索引

2. unique 自带辅助索引

3. index 手动配置辅助索引

添加:create index 索引名称一般用:ind_名字 on 表(字段);

删除:drop index 索引名 on 表名;

在不用索引时,最好删除掉相应的索引,因为设置多个无用索引后,会拖慢写入数据的速度。

 索引设置和未设置对比:

 

 

 

标签:提取,聚集,索引,Mysql,辅助,主键,block
From: https://www.cnblogs.com/xinbing/p/16625789.html

相关文章

  • mysql增删改查
    #include<stdio.h>#include<stdlib.h>#include<mysql.h>#include<unistd.h>#include<string.h>intmain(){ MYSQL*conn; MYSQL_RES*res; MYSQL_ROWro......
  • mysql的增删改查
    针对库的增删改查(文件夹)#增createdatabasedb1;创建一个库库名为db1createdatabasedb2charset='gbk';创建一个库库名为db2charset设置编码为gbk#查sho......
  • Mysql中空间字段类型Wkt和Wkb的坑
    工作中遇到空间数据,提供给我们的是二进制的Wkt的格式,存储在Mysql数据库中,采集的时候告知我们是Wkb的数据格式,由于第一次接触这样的数据格式,去查了官方文档https://www.mys......
  • MySQL搭建主从集群详细步骤~
    一、Docker安装MySQL搭建主从dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]dockerrun-p3306:3306很多-d--namehahamysql:5.7Docker启动容器的数据......
  • Java 连接 MySQL
    让Java和MySQL连接起来-囧雪诺-博客园 https://www.cnblogs.com/jonsnow/p/6246131.htmlJava连接MySQL需要驱动包,可以下载菜鸟教程提供的 jar包:http://stati......
  • Mysql 存储引擎(Innodb & MyIsam)
    SHOWENGINES;#查看mysql上面全部的存储引擎  下面主要讲解Innodb&MyIsam1.数据结构a.Innodb数据,索引,表结构都存在一个.ibd文件里b.MyIsam在磁盘上存储分......
  • 数据篇(MongoDB+ElasticSearch+Minio+TiDB+MySQL+Redis)
    一. 简介1. MongoDB  2. ElasticSearch  3. Minio   4. TiDB  5. MySQL   6. Redis         二. 目录  ......
  • mysql 不可重复读与幻读的区别
    不可重复读的重点是修改:同样的条件,你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增或者删除同样的条件,第1次和第2次读出来的记录数不一样当然,从......
  • MySQL的InnoDB引擎下执行更新Update语句时 执行时间太久 问题集锦
    场景1:更新cjq表的一个字段,发现执行时间半个小时以上还没执行结束UPDATEt_hplc_cjqSETcjq_type=2WHEREcjq_typeISNULLANDidIN(SELECTcjq_idFROMt_hp......
  • Linux MYSQL安装
    1、安装mysql服务器及客户端sudoapt-getinstallmysql-servermysql-client 2、安装mysqlC语言接口sudoapt-getinstalllibmysql++-dev 3、编译文件(mysql_co......