数据库
文章平均质量分 73
渣一个
这个作者很懒,什么都没留下…
展开
-
where、having、group by、order by、limit的区别和使用顺序
where、having、group by、order by、limit的区别和使用顺序_姚文斌的博客-CSDN博客原创 2021-09-09 21:16:22 · 661 阅读 · 0 评论 -
面试中的老大难-mysql事务和锁,一次性讲清楚!
转自:https://juejin.cn/post/6855129007336521741众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点。本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解。本文主要内容是根据掘金小册《从根儿上理解 MySQL》整理而来。如想详细了解,建议购买掘金小册阅读。什么是事务在维基百科中,对事务的定义是:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。原创 2021-03-15 17:35:57 · 307 阅读 · 0 评论 -
MySQL之一篇读懂binlog redolog undolog
转自:https://juejin.cn/post/6860252224930070536日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。binlogbinlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog原创 2021-03-15 12:22:48 · 776 阅读 · 0 评论 -
数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。在实际开发中最为常见的设计范式有三个:1.第一范式(确保每列保持原子性)第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性...原创 2021-03-02 11:23:19 · 274 阅读 · 0 评论 -
关系型数据库和非关系型数据库的区别
关系型数据库和非关系型数据库的区别待会总结,先自我学习先一 关系型数据库 有我们只需要 记住常用的几个:mysql /oracle/sql server/sqlite 几个即可我还有一篇文章 介绍了 关系型数据库和非关系型数据的数据结构 –红黑树-二叉树-B树1.首先了解一下 什么是关系型数据库?关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询;3、复杂操作:支持SQL原创 2020-10-30 17:20:29 · 970 阅读 · 0 评论 -
高性能MySQL—第一章 MySQL架构与历史
1 MySQL架构与历史1.1 MySQL逻辑架构MySQL服务器逻辑架构图最上层:不是MySQL独有,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。 比如连接处理、 授权认证、 安全等等。第二层:大多数核心服务,包括解析、分析、优化、缓存等,跨存储引擎的功能都在这一层体现:存储过程、触发器、视图等。第三层:包含了存储引擎,负责数据存储与提取。1.2 并发控制1.读写锁共享锁(sharedlock)和排他锁(exclusivelock)...原创 2020-10-01 15:26:03 · 2068 阅读 · 2 评论 -
MySQL之死锁
https://www.cnblogs.com/my_life/articles/10219562.htmlhttps://blog.csdn.net/u013380694/article/details/79041711原创 2020-10-01 15:02:36 · 105 阅读 · 0 评论 -
drop、truncate和delete的区别
转自:https://blog.csdn.net/ws0513/article/details/49980547https://zhidao.baidu.com/question/313665822.html总结如下:drop【droptabletable_name】或【drop table if exists table_name】 删除表。表占用空间全部释放。delete【deletefromtable_name】可加wherelimit等部分删除记录,若不加w...原创 2020-09-21 10:49:04 · 152 阅读 · 0 评论 -
常见Mysql的慢查询优化方式
转自:https://blog.csdn.net/qq_35571554/article/details/82800463这篇文章主要是就在公司实习的时候,对SQL优化工作作出的一些整理。 在公司实习的时候,导师分配了SQL慢查询优化的任务,任务是这样的:每周从平台中导出生产数据库的慢查询文件进行分析。进行SQL优化的手段也主要是修改SQL写法,或者新增索引。 现在从记录项目中的一点点做起。 (1)数据库中设置SQL慢查询 一、第一步.开启mysql慢查询...原创 2020-09-19 20:36:36 · 317 阅读 · 0 评论 -
关于group by的用法 原理
转自:https://blog.csdn.net/u014717572/article/details/80687042写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是*,而是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?不过最后还是转过来了,简单写写吧,大牛们直接略过吧。=========正文开始=========原创 2020-09-10 22:47:51 · 441 阅读 · 1 评论 -
LeetCode 627. 交换工资
#######方法一#####update salary set sex= if(sex='m','f','m');#######方法二#####update salary set sex = case sex when 'm' then 'f' else 'm'end;原创 2020-09-10 22:14:10 · 116 阅读 · 0 评论 -
B+树索引和哈希索引
转自:https://www.cnblogs.com/zengkefu/p/5647279.html导读在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议。二者区别备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTREE,例如像下面这样的写法:CREATE TABLE t(aid int unsigned not null auto_increment,userid int unsigned not n原创 2020-09-06 16:00:11 · 635 阅读 · 0 评论 -
Redis如何支持高并发的访问
转自:https://www.jianshu.com/p/0bf46dd0aaf5参考:https://youzhixueyuan.com/reasons-for-redis-fast.htmlRedis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单线程的,省去了很多上下文切换线程的时间;3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连原创 2020-09-06 13:56:28 · 3044 阅读 · 0 评论 -
SQL优化的几种方法
转自:https://blog.csdn.net/jie_liang/article/details/77340905在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select...原创 2020-08-23 16:21:59 · 646 阅读 · 0 评论 -
索引查找和索引扫描
索引的访问方式主要是 索引查找、索引扫描。(1)索引查找在执行计划中为 index seek,适用于查找少量数据。对应随机IO,能快速的定位一条数据。(2)索引扫描在执行计划中为 index scan,适合扫描整个索引的数据。类似于全表扫描(只扫描索引)对应顺序IO,IO效率本身比较高。(3)效率对比索引查找 和 索引扫描,单从IO效率上来说,肯定是索引扫描的效率更高,因为顺序IO的效率高于随机IO的效率。但是一个索引查找消耗的时间,肯定要远小于索引扫描的时间..原创 2020-08-23 16:14:54 · 2058 阅读 · 0 评论 -
MySQL常用关键字
1.distinct返回列值,去除重复值SELECT DISTINCT 列名称 FROM 表名称2.order by根据字段由小到大排序(系统默认由小到大),若第一个字段重复了,order by后再加一字段再比较。 也可将sal换成数字(代表在表中是第几个字段,从1开始计数)select name,job,sal from table_name where name = ‘张三’ order by sal;3.asc desc手动指定按字段由小到大排序(升序关键字 a原创 2020-08-23 12:30:22 · 12260 阅读 · 3 评论 -
SQL中IN和EXISTS用法的区别
结论1. in()适合B表比A表数据小的情况2. exists()适合B表比A表数据大的情况当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.使用inselect * from A where id in(select id from B)以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.它的查询过程类似于以下过.原创 2020-08-23 12:25:17 · 443 阅读 · 0 评论 -
MySQL性能优化之:索引下推
转自:https://www.cnblogs.com/Chenjiabing/p/12600926.html导读 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 。 在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器原创 2020-08-23 10:21:04 · 2648 阅读 · 0 评论 -
MySQL之InnoDB索引的一些问题
索引索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等。本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结构。InnoDB的索引结构在InnoDB中是通过一种多路搜索树——B+树实现索引结构的。在B+树中是只有叶子结点会存储数据,而且所有叶子结点会形成一个链表。而在InnoDB中维护的是一个双向链表。你可能会有一个疑问,为什么使用 B+树 而不使用二叉树或者B树?首先,我们知道访问磁盘需要访问到指定块中,而访问指定块是需要 盘片旋转 和 磁臂移动 的,这是一个原创 2020-08-23 10:19:18 · 426 阅读 · 0 评论 -
InnoDB一棵B+树可以存放多少行数据?
转自:https://www.cnblogs.com/leefreeman/p/8315844.html一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最原创 2020-08-23 10:17:00 · 203 阅读 · 0 评论 -
mysql的Innodb为什么使用B+树
不同数据结构的优缺点hash:查找快,但是不适合范围查找有序数组:查找和范围查找都很快,但是插入就需要移动之后的所有数据二叉树:二分查找法,会有左倾或者右倾的情况,且不适合做范围查询平衡二叉树:避免的左倾和右倾,但是数据量大的时候,树高会很高,也就是IO次数会很多B-Tree:相比平衡二叉树,树高是降低了,但是还是不适合范围查询,范围查询需要遍历所有数据B+Tree:将所有数据都放到叶子节点,且叶子节点形成一个列表(可以做范围查询),非叶子节点只放键值,每个数据叶中的有效数据就多了,原创 2020-08-23 09:59:17 · 1755 阅读 · 0 评论 -
mysql索引最左匹配原则的理解
创建表create table test(a int ,b int,c int,d int,key index_abc(a,b,c))engine=InnoDB default charset=utf8;插入 10000 条数据DROP PROCEDURE IF EXISTS proc_initData;DELIMITER $CREATE PROCEDURE proc_initData()BEGINDECLARE i INT DEFAULT 1;WHILE i<原创 2020-08-22 22:48:28 · 816 阅读 · 0 评论 -
Leetcode-MySQL-197. 上升的温度
给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。+---------+------------------+------------------+| Id(INT) | RecordDate(DATE) | Temperature(INT) |+---------+------------------+------------------+| 1 | 2015-01-01 | 10...原创 2020-08-22 17:13:40 · 121 阅读 · 0 评论 -
通过mysql实现leader election
通过mysql实现leader election当我们将同一个服务部署到多个节点(或者多个容器),以保证服务的高可用,但我们希望在同一时间,只有一个服务是active状态,其他服务处于inactive状态。或者说,要在这些服务中选出一个主节点。Why not use zookeeper or etcdzk和etcd确实能解决上述需求。这也是etcd和zk的主要用法之一。但有时候,我们已经依赖了mysql,而不想仅仅为了选主而引入新的组件。可以直接通过mysql来实现选主机制了。Why not原创 2020-08-20 22:11:55 · 1232 阅读 · 0 评论 -
EXPLAIN字段详解
explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。使用方法,在select语句前加上explain就可以了:如:explainselectsurname,first_namefroma,bwherea.id=b.idEXPLAIN列的解释:table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、...原创 2020-08-20 22:09:38 · 1367 阅读 · 0 评论 -
聚集索引和非聚集索引
一.索引简介众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引。这篇文章会总结SQL Server以及MySQL的InnoDB和MyISAM两种SQL的索引。SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。MySQL 索引类型有:唯一索引,主键(聚集)索引,非聚集索引,全文索引。二.聚集索引聚集(clustered)索引,也叫聚簇索引。定义:数据行的原创 2020-08-19 22:38:11 · 816 阅读 · 0 评论 -
MySQL事务ACID实现原理
照例,我们先来一个场景~面试官:"知道事务的四大特性么?"你:"懂,ACID嘛,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)!"面试官:“你们是用mysql数据库吧,能简单说说innodb中怎么实现这四大特性的么?”你:"我只知道隔离性是怎么做的balabala~~"面试官:"还是回去等通知吧~"OK,回到正题。说到事务的四大特性原子性(Atomicity)、一致性(Consistency)、隔离性(Isolat原创 2020-08-16 10:28:45 · 421 阅读 · 0 评论 -
MySQL中MVCC+行级锁的工作机制(源码佐证)
转自:https://blog.csdn.net/Waves___/article/details/105295060序 最近在学习MySQL中的MVCC,看了网上的各种版本,什么创建版本号、删除版本号,一开始看的时候,好像很对的样子,但实际上很多都是错误的。经过好几天的查阅对比,在几篇博客的帮助下,才算是觉得正确理解了MySQL中的MVCC。 本文是对MVCC的一些总结,并找到相关源码佐证(talk is cheap,show me the code!网上错误的解释实...原创 2020-08-13 21:20:56 · 954 阅读 · 0 评论 -
MySQL行锁 表锁理解
MySQL InnoDB 锁表与锁行由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键。例1: (明确指定主键,并且有此笔资料,row lock)SELECT * FROM products WHERE id='3' FOR UPDATE;SE原创 2020-08-13 18:22:29 · 376 阅读 · 0 评论 -
MySQL之CAID-隔离级别讲解
1. 数据库事务ACID特性数据库事务的4个特性:原子性(Atomic):事务中的多个操作,不可分割,要么都成功,要么都失败; All or Nothing.一致性(Consistency):事务操作之后, 数据库所处的状态和业务规则是一致的; 比如a,b账户相互转账之后,总金额不变;隔离性(Isolation):多个事务之间就像是串行执行一样,不相互影响;持久性(Durability):事务提交后被持久化到永久存储.2. 隔离性其中隔离性分为了四种:READ UNCOMMIT...原创 2020-08-13 17:51:41 · 2149 阅读 · 0 评论 -
LeetCode-MySQL196. 删除重复的电子邮箱
编写一个 SQL 查询,来删除Person表中所有重复的电子邮箱,重复的邮箱里只保留Id最小的那个。+----+------------------+| Id | Email |+----+------------------+| 1 | john@example.com || 2 | bob@example.com || 3 | john@example.com |+----+------------------+Id 是这个表的主键。例如...转载 2020-08-08 20:28:44 · 307 阅读 · 0 评论 -
Leetcode -MySQL-184. 部门工资最高的员工
SQL架构Employee表包含所有员工信息,每个员工有其对应的Id, salary 和 department Id。+----+-------+--------+--------------+| Id | Name | Salary | DepartmentId |+----+-------+--------+--------------+| 1 | Joe | 70000 | 1 || 2 | Jim | 90000 | 1 ...原创 2020-08-08 19:50:24 · 246 阅读 · 0 评论 -
MySQL null与not null和null与空值‘‘的区别
null 表示什么也不是, 不能=、>、< … 所有的判断,结果都是false,所有只能用 is null进行判断。转自:https://segmentfault.com/a/1190000009540449相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候,到底要select * from table where column &.原创 2020-08-07 14:25:56 · 647 阅读 · 0 评论 -
Leetcode-MySQL-180. 连续出现的数字
编写一个 SQL 查询,查找Person 表中所有重复的电子邮箱。示例:+----+---------+| Id | Email |+----+---------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |+----+---------+根据以上输入,你的查询应返回以下结果:+---------+| Email |+---------+| a@b.com |+---------+说明:所有电子邮箱...原创 2020-08-07 13:19:12 · 145 阅读 · 0 评论 -
count(1)、count(*)、count(字段)的区别
MyISAM不支持事务,MyISAM中的锁是表级锁;而InnoDB支持事务,并且支持行级锁。count(1):InnoDB 遍历全表,但是不取值,server 层对返回的每一行数据新增一个 1,然后进行判断累加。包括NULL值行。count(*):MyISAM把表的总行数单独记录下来,若没有where groupby,直接返回行数。包括NULL值行。 InnoDB不能使用这种缓存操作,因为支持事务,大部分操作都是行级锁,行可能被并行修改,那么缓存记录不准确。 但是,InnoDB还是针对原创 2020-08-07 13:17:58 · 782 阅读 · 0 评论 -
Leetcode-MySQL-180. 连续出现的数字
编写一个 SQL 查询,查找所有至少连续出现三次的数字。+----+-----+| Id | Num |+----+-----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 || 5 | 1 || 6 | 2 || 7 | 2 |+----+-----+例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。+-----------------+| ConsecutiveNums |+--...原创 2020-08-06 21:16:39 · 184 阅读 · 0 评论 -
Leetcode -MySQL-178. 分数排名
编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。+----+-------+| Id | Score |+----+-------+| 1 | 3.50 || 2 | 3.65 || 3 | 4.00 || 4 | 3.85 || 5 | 4.00 || 6 | 3.65 |+----+-------+例如,根据上述给定的...原创 2020-08-06 19:40:17 · 216 阅读 · 0 评论 -
Redis ZSet 的几种使用场景
1. 延时队列zset 会按 score 进行排序,如果 score 代表想要执行时间的时间戳。在某个时间将它插入 zset 集合中,它变会按照时间戳大小进行排序,也就是对执行时间前后进行排序。起一个死循环线程不断地进行取第一个 key 值,如果当前时间戳大于等于该 key 值的 score 就将它取出来进行消费删除,可以达到延时执行的目的。发送消息代码如下:public void sendMessage(long messageId, String message) {..原创 2020-08-06 12:13:50 · 9984 阅读 · 1 评论 -
Redis缓存淘汰策略
常用缓存策略常用的缓存淘汰策略有以下先进先出算法(FIFO) Least Frequently Used(LFU) 淘汰一定时期内被访问次数最少的页面,以次数作为参考 Least Recently Used(LRU) 淘汰最长时间未被使用的页面,以时间作为参考这些算法在不同层次的缓存上执行时拥有不同的效率和代价,需根据具体场合选择最合适的一种。FIFOFIFO(First in First out),先进先出。在FIFO Cache设计中,核心原则就是:如果一个数据最先进入缓存中,原创 2020-08-06 10:29:32 · 1223 阅读 · 0 评论 -
后端开发如何设计数据库系列文章(二)设计大数据量表结构
上篇文章讲解了传统数据库的一些设计注意点。本篇为第二篇,在大数据量的情况下,如何去提前设计这个表结构,来达到一个比较好的效果。对于团队,对于后续的维护和扩展都带来更大的便利。自增id自增id还是可以有,但是不是必须的了。但是建议还是每张表中有一个自增id。 为什么,还是那句话,做数据查询,迁移,排序的时候,有着天然的一些优势。唯一标识这个标识无论是token,还是其他例如订单的订单号或者其他唯一标识都行。 重点是唯一,不只是在单系统中唯一,而是需要在并发的情况,也能够保持唯一。关于分布原创 2020-08-05 21:37:22 · 568 阅读 · 0 评论