b2b主要网站有哪些/seo优缺点

b2b主要网站有哪些,seo优缺点,wordpress 数据库配置错误,做网站开始要注意什么目录 一,初识索引 二,MySQL与磁盘交互的基本单位 三,MySQL中数据文件的特性 四,理解page和索引 五,聚簇索引和非聚簇索引 六,索引操作 查询索引 创建主键索引 唯一索引的创建 普通索引的创建 全文…

目录

一,初识索引

二,MySQL与磁盘交互的基本单位

 三,MySQL中数据文件的特性

四,理解page和索引

 五,聚簇索引和非聚簇索引

六,索引操作

查询索引

创建主键索引

唯一索引的创建

普通索引的创建 

全文索引的创建

删除索引

索引创建原则 


一,初识索引

MySQL索引类似于书籍的索引(目录),每个书籍都有目录,通过目录可以快速定位到要查找的页。

MySQL索引是一种数据结构,用于加快数据库查询的速度和性能。

索引能够显著提高查询的速度,尤其是在大型表中进行搜索时。通过使用索引,MySQL可以直接定位到满足条件的数据行,不需要遍历整个表。

但是查询速度的提高,同时是以插入,更新,和删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。

常见的索引分类:

  • 主键索引(primary key)
  • 唯一键索引(unique)
  • 普通 索引(index)
  • 全文索引(fulltext)

二,MySQL与磁盘交互的基本单位

MySQL在应用层给用户提供存储服务,用户可以 进行CURD操作,而存储 的都是数据,数据在磁盘这个外设中。磁盘是计算机的一个机械设备,相比于计算机其他电子元件,磁盘效率是比较低的。我们平时对表的操作 ,都是需要进行IO的。

我们知道,操作系统和磁盘交互(IO)的基本单位是4KB。而MySQL作为一款应用层软件,可以想象成 一种特殊的文件系统。它有着更高的IO场景,所以,为了提高基本的IO效率,MySQL和磁盘进行数据交互的基本单位是16KB(存储引擎为Innodb)。这个基本数据单元,在MySQL中叫做page。

 

 三,MySQL中数据文件的特性

MySQL中的数据文件,是以page为单位保存在磁盘上的。

MySQL的CURD操作,都是需要计算的,找到对应的插入位置,找到对应要修改或者查询的数据。

而只要涉及到计算,就需要CPU的参与,而为了便于CPU的参与,一定要先将数据移到内存中。

所以再特定时间内,数据一定是磁盘中有,内存中也有。后序操作完内存数据之后,以特点的刷新策略,刷新的磁盘上。而这时就涉及 到磁盘和内存的数据交互,也就是IO了。此时IO的基本单位是page。

为了更好的进行上面的操作,MySQL服务器在内存中运行的时候,在服务器内部,就申请了Buffer pool的大内存空间,来进行各种缓存。其实就是很大的空间,来和磁盘进行IO交互。

在Innodb存储引擎下,Buffer pool的大小为128M。MySQL需要自己对这部分空间进行管理。

为了更高的效率,一定要尽可能的减少系统的磁盘的IO次数。

四,理解page和索引

MySQL内部,将来Buffer pool缓冲区中一定需要并且存在大量的page,所以MySQL必须将这些page管理起来。通过“先描述,再组织”。所以page内部并不是单纯的存储数据,page内部也需要写入对应的管理信息。我们目前可以简单的理解成一个个独立的文件是由一个或者多个page构成的。

 思考一下:为何MySQL和磁盘进行IO交互时候,要采用page的方案进行交互呢?为什么不是用多少加载多少呢?

  • 因为预加载可以有效减少IO的次数。通过局部性原理,当前访问某些数据或代码的某一行时,下次访问可能会在这次访问的周边进行访问。
  • 往往IO效率低下的最主要矛盾不是单次IO数据量的大小,而是IO的次数。

 

不同的page,再MySQL中都是16KB,使用prev和next构成双向链表。

  •  上面的单个页,在查询数据的时候,直接将一整页的数据加载到内存,以减少硬盘IO次数,从而提高性能。但是,我们也可以看到,现在的页内部,实际上是采用了链表的结构,前一条数据指向后一条数据,本质上还是通过数据的逐条比较来取出特定的数据。
  • 如果有1千万条数据,一定需要多个page页保存起来,多个page彼此采用双向链表连接起来,而每个page内部也是有 链表来管理的。那么查找特定的一条记录,也一定是线性查找,效率太低了。

所以这时就需要引入目录了。

页目录:

就以书籍为例,每本数都有目录。我们如果要看指定的章节,找到章节有两种做法:

  • 从头逐页的向后翻,直到找到目标内容。
  • 通过提供的目录,找到指定的页数。当然在找目录的过程中,可以顺序查找,不过因为目录肯定少,所以可以快速提高定位。
  • 本质上,书本中的目录是花了额外的纸做的,但却提高了效率。
  • 所以,目录是一种空间换时间的做法。

单页情况:

针对之前链式结构的page页,我们可以引入页目录。

那么当前,在一个page内部,引入了页目录。 比如,要查找id=4的记录,之前线性遍历4次,才能拿到结果。现在直接通过目录2,直接定位新的其实位置,提高了效率。

多页情况:

MySQL中每一页的大小只有16KB,单个page大小固定,所以随着数据量不断增大,16KB不能存下所有数据,那么必定会有多个页来存储数据。

在单表数据不断被插入 的情况下,MySQL会在容量不足的时候,自动开辟新的page来保存新的数据,然偶通过指针的方式马,将所有page组织起来。

这样我们就可以通过多个page的遍历,page内部通过目录快速定位数据。可是这样,貌似也有效率问题,在page之间,还是线性遍历,意味着还是需要大量的IO。将下一个page加载到内存,进行线性检测。这样就显得我们 page内部的目录有点杯水车薪了。

解决方案,给page也带上目录:

  •  使用一个目录项来指向某一页,而这个目录项不存放数据,只存放它指向page中最小数据的键值
  • 和页内目录不同,这种目录管理的是页,而页内目录管理的是数据。
  • 其中,每个目录项的构成是键值+指针。

目录页(page目录)管理一个个的目录,目录页中的数据存放的就是指向那一页中最小的数据。通过该数据,与我们要查找的数据进行比较,找到访问哪个page。

对于一个page目录,它的大小是16KB,假设忽略掉前后指针,该page只存储一个数据和对应的指针,在64位环境下,16*1024/(4+8)=1365。即一个page目录,大概可以管理1365个page。也就是1365*1024/1024/1024=21MB,大概可以管理21MB的数据。

但是,我们的page目录也可能会产生线性遍历造成的多次IO,降低效率问题。同样,我们可以在上层再加一层目录page。

一般而言,两三层的设计已经足够了 ,可以管理特别大的数据。

这个结构就是B+树。

但是,实际存储的时候,除了叶子节点之间还会以链表的形式连接,其他节点都不会连接。这刚好符合B+树!

注意:

叶子节点保存有数据,其他节点不保存数据,只保存目录项 。???

原因:非叶子节点不保存数据,那么就可以存储更多的目录项,目录页,就可以管理更多的page。换句话说,查找数据时,可以淘汰掉的目录页更多,进行 IO的次数就可以大大减少。在IO层面,提高了效率。同时,每一个page节点,都有目录项,大大提高了搜索效率。


叶子节点为什么全部链接起来???

首先,这是B+树的特点。所以MySQL使用这种数据结构。

方便进行范围查找。

上面的图,描述的就是MySQL innodb 下的索引结构。我们在建表的时候,就会生成这样一颗B+树,他会将我们表中的主键一列作为索引,而如果我们在建表的时候没有指明主键,系统会默认生成一个主键。一般我们插入数据的时候,就是在该结构下进行CURD的。

总结:

  • page分为目录页和数据页。目录页只存放各个下级page的最小键值。
  • 查找的时候,自顶向下,只需加载部分目录页到内存,即可完成查找过程,大大较少了IO次数。

 五,聚簇索引和非聚簇索引

前面所讲到的都是innodb存储引擎下的结构。

聚簇索引:innodb存储引擎下的结构就是聚簇索引,在叶子节点中,索引page和数据page放在一起存储。

非聚簇索引:MyISAM存储引擎下的结构就是非聚簇索引,在叶子节点中,索引page和数据page分开存储。也就是说叶子 节点没有数据,只有对应数据的地址。

验证:

mysql> create table test1(
    -> id int primary key,
    -> name varchar(20) not null)engine=innodb;

 mysql> create table test2( id int primary key, name varchar(20) not nuull)engine=MyISAM;

 当然,MySQL除了默认会建立主键索引外,我们用户也有可能按照其他列信息建立索引,一般这种索引叫做普通索引。

  • 对于MyISAM而言,建立主键索引和普通索引没有区别,主键索引的叶子节点存储的是指向数据的指针,那么创建普通索引的时候,就是再创建一个B+树,以指定列作为键值,叶子节点存储指向数据的指针即可。所以,建立普通索引和主键索引没有区别。
  • 而对于Innode而言,我们知道主键索引对应的B+树,叶子节点会存放主键值和数据。在我们创建普通索引的时候,同样会创建一颗B+树,以指定列为键值,但是叶子节点中不存储数据,而是存储主键值。在查数据的时候,需要两边索引:首先通过普通索引(普通索引对应的B+树)查找到主键值,然后通过主键值在主键索引(主键对应的B+树)中查找数据。这种过程,叫做回表查询

所以,建立索引本质就是以该列为键值,创建一颗B+树。

六,索引操作

查询索引

show keys from 表名;

show index from 表名;

创建主键索引

  • 第一种方式

-- 在创建表的时候,直接在字段名后指定 primary key
create table user1(id int primary key, name varchar ( 30 ));
  • 第二种方式 

-- 在创建表的最后,指定某列或某几列为主键索引
create table user2(id int , name varchar ( 30 ), primary key(id));
  • 第三种方式 

create table user3(id int , name varchar ( 30 ));
-- 创建表以后再添加主键
alter table user3 add primary key(id);

主键索引的特点:

  • 创建主键索引的列,它的值不能为null,且不能重复
  • 主键索引的列基本上是int
  • 一个表中,最多有一个主键索引,当然可以使用复合主键
  • 主键索引的效率高(主键不可重复)

唯一索引的创建

  • 第一种方式

-- 在表定义时,在某列后直接指定 unique 唯一属性。
create table user4(id int primary key, name varchar ( 30 ) unique);
  • 第二种方式

-- 创建表时,在表的后面指定某列或某几列为 unique
create table user5(id int primary key, name varchar ( 30 ), unique(name));
  • 第三种方式 

create table user6(id int primary key, name varchar(30));

alter  table user6 add unique(name);

唯一索引的特点: 

  • 一个表中,可以有多个唯一索引
  • 查询效率高
  • 如果在某一列建立唯一索引,必须保证这列不能有重复数据
  • 如果一个唯一索引上指定not null,等价于主键索引

案列:

 mysql> alter table test1 add unique(name);

普通索引的创建 

  • 第一种方式

create table user8(id int primary key,
name varchar ( 20 ),
email varchar ( 30 ),
index(name) --在表的定义最后,指定某列为索引);
  • 第二种方式 
create table user9(id int primary key, name varchar ( 20 ), email
varchar ( 30 ));
alter table user9 add index(name); -- 创建完表以后指定某列为普通索引
  • 第三种方式 

create table user10(id int primary key, name varchar ( 20 ), email
varchar ( 30 ));
-- 创建一个索引名为 idx_name 的索引
create index idx_name on user10(name);//给索引起名字idx_name

普通索引的特点:

  •  一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
  • 如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

全文索引的创建

当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。 MySQL 提供全文索引机制,但是有 要求,要求表的存储引擎必须是MyISAM ,而且默认的全文索引支持英文,不支持中文

案列:

mysql> create table articles(
    -> id int unsigned auto_increment not null primary key,
    -> title varchar(200),
    -> body text,
    -> FULLTEXT(title,body))engine=myisam;

  • 查询文章中有没有database数据

如果使用如下查询方式,虽然查询出数据,但是没有使用到全文索引:

mysql> select * from articles where body like '%database%';

可以使用 explain工具看一下,是否使用到索引

使用全文索引:

mysql> select * from articles where match(title,body) against ('database');

删除索引

删除主键索引

alter table  表名 drop  primary key;

删除其他索引

alter table 表名 drop index 索引名;

//索引名就是show keys from表名结果种的key_name字段

 drop index 索引名  on 表名;

索引创建原则 

  • 比较频繁作为查询条件的字段应该创建索引
  • 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
  • 更新非常频繁的字段不适合作创建索引
  • 不会出现在where子句中的字段不该创建索引

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

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

相关文章

springboot项目启动常见的问题以及配置以及一些使用技巧

1.配置仓库 这里要把xml文件从国外的镜像源改成国内的镜像源。改镜像源可以查看这篇文章 点击查看 2.更改文件类型 方法一:右键文件找到Mark Dircetory as可以更改文件类型 方法二: 3.springboot本地Maven仓库的位置 4.pom.xml文件报红错误怎么办 这…

【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对数据结构感…

流量分析2

一,webshell流量 [GKCTF 2021]签到 先看协议分级,大部分是tcp,里面有http的基于的行文本数据占了很大的比重,看看里面有什么 过滤http的流量 点击一条流量,里面的内容进去后面有基于行的文本数据, 先解he…

头歌实践教学平台--【数据库概论】--SQL

一、表结构与完整性约束的修改(ALTER) 1.修改表名 USE TestDb1; alter table your_table rename TO my_table; 2.添加与删除字段 #语句1:删除表orderDetail中的列orderDate alter table orderDetail drop orderDate; #语句2:添加列unitPrice alter t…

vue h5实现车牌号输入框

哈喽,大家好,最近鹏仔开发的项目是学校校内车辆超速方面的统计检测方面的系统,在开发过程中发现有个小功能,就是用户移动端添加车牌号,刚开始想着就一个输入框,提交时正则效验一下格式就行,最后…

硬件基础(5):(3)二极管的应用

文章目录 [toc]1. **整流电路****功能**:**工作原理**:**应用实例**:电路组成:整流过程:电路的应用: 2. **稳压电路****功能**:**工作原理**:**应用实例**:电路组成及功能…

ElementUI el-menu导航开启vue-router模式

有没有小伙伴遇到这么一种情况:ElementUI el-menu导航中,开启vue-router 的模式后,点击触发事件而不进行路由跳转? 别慌!下面直接说解决方案: 借助路由守卫进行判断 给el-menu绑定切换事件,给…

Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?

🚀 Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?🤔 父组件:identify-list.vue子组件:fake-clue-list.vue 嘿,各位前端探险家!👋 今天我们要在 Vue 2 的代码丛林…

C++学习之路:从头搞懂配置VScode开发环境的逻辑与步骤

目录 编辑器与IDE基于vscode的C开发环境配置1. 下载vscode、浅尝编译。番外篇 2. 安装插件,赋能编程。3. 各种json文件的作用。c_cpp_properties.jsontask.jsonlaunch.json 总结&&彩蛋 编辑器与IDE 上一篇博客已经介绍过了C程序的一个编译流程,从…

PPT 转高精度图片 API 接口

PPT 转高精度图片 API 接口 文件处理 / 图片处理,将 PPT 文件转换为图片序列。 1. 产品功能 支持将 PPT 文件转换为高质量图片序列;支持 .ppt 和 .pptx 格式;保持原始 PPT 的布局和样式;转换后的图片支持永久访问;全…

VSCode 抽风之 两个conda环境同时在被激活

出现了神奇的(toolsZCH)(base) 提示符,如下图所示: 原因大概是:conda 环境的双重激活:可能是 conda 环境没有被正确清理或初始化,导致 base 和 toolsZCH 同时被激活。 解决办法就是 :conda deactivate 两次…

git | 回退版本 并保存当前修改到stash,在进行整合。[git checkout | git stash 等方法 ]

目录 一些常见命令: git 回退版本 一、临时回退(不会修改历史,可随时回到当前版本) 方法1:git checkout HEAD~1 问题:处于 detached HEAD 状态下提交的,无法直接 git push ✅ 选项 1&…

如何使用 Postman 进行接口测试?

使用 Postman 这一工具,可以轻松地进行接口测试。以下是一份简单的使用教程,帮助你快速上手。 Postman 接口测试教程:详细步骤及操作技巧

写作软件新体验:让文字创作更高效

一、开篇引入:写作难题的破解之道 在当今信息爆炸的时代,写作成为了我们生活和工作中不可或缺的一部分。然而,面对繁琐的写作任务,我们时常感到力不从心,甚至陷入创作的瓶颈。那么,有没有一款软件能够帮助我们破解这一难题,让文字创作变得更加高效和轻松呢?答案是肯定…

大模型思维链COT:Chain-of-Thought Prompting Elicits Reasoningin Large Language Models

一、TL;DR 探索了COT(chain-of-thought prompting)通过一系列的中间推理步骤来显著的提升了LLM的复杂推理能力在三个大型语言模型上的实验表明,思维链提示能够提升模型在一系列算术、常识和符号推理任务上的表现解释了一下为什么…

决策树算法详解:从西瓜分类到实战应用

目录 0. 引言 1. 决策树是什么? 1.1 生活中的决策树 1.2 专业版决策树 2. 如何构建决策树? 2.1 关键问题:选哪个特征先判断? 2.1.1 信息熵(数据混乱度) 2.1.2 信息增益(划分后的整洁度提…

超融合服务器是什么

超融合服务器的定义与背景 超融合服务器(Hyperconverged Infrastructure, HCI)是一种通过软件定义技术,将计算、存储、网络和虚拟化功能整合到单一硬件平台中的IT基础设施解决方案。其核心目标是通过资源的高度集成和统一管理,简…

【网络层协议】NAT技术内网穿透

IP地址数量限制 我们知道,IP地址(IPv4)是一个4字节32位的整数,那么一共只有2^32也就是接近43亿个IP地址,而TCP/IP协议栈规定,每台主机只能有一个IP地址,这就意味着,一共只有不到43亿…

时隔多年,终于给它换了皮肤,并正式起了名字

时隔多年,终于更新了直播推流软件UI,并正式命名为FlashEncoder。软件仍使用MFC框架,重绘了所有用到的控件,可以有效保证软件性能,也便于后续进一步优化。 下载地址:https://download.csdn.net/download/Xi…

如何避免测试环境不稳定导致的误报

避免测试环境不稳定导致误报的核心方法包括搭建独立稳定的测试环境、使用环境监控工具、建立环境变更管理机制、定期维护更新测试环境以及提升团队的环境管理意识。 其中,搭建独立稳定的测试环境尤为关键。独立的测试环境能有效隔离其他环境的干扰,保证测…