mysql
文章平均质量分 77
Chasel_H
记录学习
展开
-
MySQL索引之B-树与B+树
我们知道MySQL中索引最常用的数据结构就是Hash和B+Tree,而其中的B+树更是大多数 MySQL 存储引擎的默认索引类型。那究竟什么是B+树?什么又是B树?它们之间有什么关系吗?B树/B-树1、哈希表、二叉查找树、B树的比较要弄清楚B+树,就得先知道B-树(B-树就是B树),首先MySQL索引之所以要使用树作为数据结构进行存储是因为它查询效率高,且可以保持有序,解决hash结构无序只能用作等值查询场景的缺陷。那为什么不使用二叉查找树?我们知道二叉查找树的查找插入的时间复.原创 2021-03-10 16:09:49 · 446 阅读 · 0 评论 -
为什么同一条sql有时候执行会变慢?
一、预备知识WALInnoDB在处理更新语句的时候是会遵循WAL(Write-Ahead Logging)机制的,即是更新了内存和做了写redo log这个磁盘操作而不是直接更新磁盘中对应的表(因为去到磁盘中全表遍历找到对应的表更新,因为这样会耗费很多时间),理想情况下是等到系统空闲时再把内存与磁盘中不一致的数据同步到磁盘。脏页&&干净页在MySQL中将数据从磁盘读取到内存是按页读取的,这个页称为数据页。当更新时WAL机制造成内存数据页和磁盘数据页内容不一致的页称为脏页。相反的原创 2021-03-04 22:46:31 · 2434 阅读 · 3 评论 -
InnoDB的索引模型
在 MySQL 中,索引是在存储引擎层实现的,存储引擎没有统一的索引标准,所以在不同存储引擎中索引的工作方式并不一样。即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。而在MySQL 数据库中,InnoDB 存储引擎的使用最为广泛,所以我们来了解一下InnoDB 的索引模型。1、InnoDB的索引模型InnoDB 使用了B+树索引模型,数据都是存储在 B+ 树中的。每一个索引在 InnoDB中是对应一棵B+树。例如我们建一个表,并插入一些数据。建表语句如下:create tab.原创 2021-02-25 21:40:12 · 121 阅读 · 0 评论 -
MySQL日志之redo log与binlog
在做SQL数据更新的时候,往往会设计两个重要的日志模块-redo log以及binlog1、redo logredo log是InnoDB引擎上特有的日志。①为什么需要redo log?因为在MySQL中,如果每次更新都立刻写进磁盘,磁盘是需要去到更新对应的表找到对应的记录进行修改。这个过程中的IO操作和查找操作都需要比较长的时间,这在更新操作频繁的系统里显然是效率低下的。所以为了解决这个问题,MySQL设计者使用了WAL 技术(Write-Ahead Logging)来解决这个问题,.原创 2021-02-25 16:04:41 · 149 阅读 · 0 评论 -
MySQL表的联结之inner join/outer join
一、关系表先看一个关系表的例子:假设有一个产品表:里面存储了产品描述、价格、供应商信息。然后表里有同一供应商生产的多种产品、那么在何处存储供应商信息?答:应新建一个表存储供应商信息,每个供应商占一行每个供应商具有唯一标识。此标识为主键。例如供应商ID而产品表只存储产品信息,它除了存储供应商ID作为外键以外不存储供应商的其他信息。主键:能唯一标识表中的每一行。外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。二、联结表1、为什么要使用联结由上面关系表的例子我们原创 2020-12-30 17:21:36 · 713 阅读 · 0 评论 -
MySQL之GROUP BY分组
我们知道,在使用聚集函数都是表的所有数据或匹配特定的WHERE子句的数据上进行的。例如下面返回厂商id为1001生产了多少种产品的总数:但是当我们想知道所有厂商生产的产品的种类总数时、或者提供了数量超过100件的商品种类的总数时应该怎么处理?答:通过分组条件把数据分成多个分组,然后通过聚集函数对分别每个组进行计算一、创建分组分组是在SELECT语句中的GROUP BY子句中建立的。二、过滤分组MySQL允许我们用HAVING过滤分组,但注意这种过滤是基于完整分组而不是个别个体进行过滤。原创 2020-12-29 15:57:35 · 326 阅读 · 0 评论 -
MySQL之聚集函数
当我们只需要对表中数据进行汇总而不需要将它们实际检索出来的时候,我们可以使用MySQL提供的聚集函数。聚集函数:运行在行组上,计算和返回单个值的函数。AVG() :返回某列的平均值COUNT() : 返回某列的行数MAX() :返回某列的最大值MIN() :返回某列的最小值SUM() :返回某列值之和一、聚集函数1、AVG()2、COUNT()COUNT()可用于确定表中行的数目或符合特定条件的行的数目。它的两种使用方式:使用COUNT(*)对表中行的数目进行计数,不管表原创 2020-12-29 12:42:11 · 708 阅读 · 0 评论 -
MySQL之使用正则表达式进行搜索
一、什么是正则表达式正则表达式是用来匹配文本的字符集合。随着过滤条件复杂性的增加,使用匹配、比较和通配符等方式寻找数据已经不能满足要求。我们则使用正则表达式来匹配。例如:从一个文本文件中提取电话号码、在一个文本块找到所有重复的单词等。二、使用MySQL正则表达式MySQL用WHERE子句对正则表达式提供了初步的支持,允许指定正则表达式过滤select检索出的数据。(注:MySQL仅支持正则表达式里的一个子集)1、基本字符匹配这条语句与LIKE语句的模糊查询非常相似,它通过REGEXP告诉M原创 2020-12-27 15:08:42 · 160 阅读 · 0 评论 -
MySQL之使用通配符过滤
一、通配符通配符:用来匹配值的一部分的特殊字符。搜索模式:由字面值、通配或两者组合构成的搜索条件。LIKE操作符:为了在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较1、百分号(%)通配符在搜索串中,%表示任意字符出现的任意次数。注意:%不仅能匹配一个到多个的字符,还能匹配0个字符。2、下划线(_)通配符在搜索串中,_能匹配任意字符,但是只能匹配单个字符。3、使用通配符的注意事项不要过度的使用通配符原创 2020-12-26 15:12:02 · 123 阅读 · 1 评论 -
MySQL排序数据之ORDER BY
目标怎么对数据进行排序按单列排序按多个列排序指定排序方向-单列-多列使用ORDER BY与LIMIT组合,找出列中最高或最低值一、使用ORDER BY对数据进行排序通过SELECT检索出来的数据是没有特定顺序的。所以为了明确SELECT语句检索出来的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。SELECT 列名1, 列名2, ... , 列名n FROM 表名 ORDER BY 列名X;注意:ORDER BY子句中所使用的列不原创 2020-11-30 14:54:31 · 222 阅读 · 0 评论 -
MySQL基础之登录mysql以及获取数据库基本信息
目标如何连接和登录到MySQL?如何执行MySQL语句?如何获得数据库和表的信息一、连接/登录mysql?在最初安装MySQL的时候,会要求你输入一个登录管理(通常为root)和一个密码。安装完毕后,为了连接到MySQL,需要以下消息:主机名—如果连接到本地MySQL服务器,为localhost。端口一个合法的用户名用户密码(如果需要)通常登录本地mysql的命令其中一些参数:-u 用户名-p 密码没出现的参数:-h ip地址 通常用于远程登录 (注意:远程登录my原创 2020-11-26 12:47:59 · 627 阅读 · 1 评论