数据库
文章平均质量分 81
loading。。。
这个作者很懒,什么都没留下…
展开
-
Mysql explain 命令字段详解
explain命令通过explain命令我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。explain命令输出的结果有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extraid包含一组数字,表示查询中执行SELECT子句或操作表的顺序。在id列上也会有几种情况:如果id相同执行顺序由上至下。如果id不相同,id的序号原创 2022-04-09 17:43:33 · 370 阅读 · 0 评论 -
分布式事务,这一篇就够了
文章目录基础理论事务分布式事务强一致性、弱一致性、最终一致性CAP 原则BASE 理论柔性事务幂等操作分布式事务使用场景转账下单扣库存同步超时分布式事务的解决方案两阶段提交/XATCC本地消息表可靠消息最终一致性尽最大努力通知分布式事务实战两阶段提交/XATCC可靠消息最终一致性本地消息表最大努力通知总结基础理论事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务应该具有原创 2020-09-16 14:37:24 · 626 阅读 · 0 评论 -
面试之不得不说的数据库索引
文章目录MySQL索引原理索引目的索引原理磁盘IO与预读索引的数据结构详解b+树b+树的查找过程b+树性质建索引的几大原则B+Tree相对于B-Tree有几点不同:索引实战题型一题型二题型三题型四题型五MySQL索引原理索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引原创 2020-09-15 16:52:43 · 135 阅读 · 0 评论 -
面试: 再看数据库与缓存一致性问题
读取数据库是比较耗时的操作,如果每次都需要去数据库读取数据,会对数据库造成一定的压力,程序性能也会比较低下,所以需要引入缓存。缓存是提升程序性能的最重要、最有效、也是最简单的手段之一。引入缓存后,读操作会先去缓存中看下,如果没有命中缓存,才去读取数据库,然后把读取出来的数据再放到缓存中去,这样下一次读操作就可以命中缓存了,如果命中缓存,就可以直接把数据返回出去了。写操作,除了修改数据库,还需要删除缓存,因为不删除缓存,读的操作读到的永远都是缓存中的旧数据。先删除缓存,后修改数据库这个方案显然是有原创 2020-09-07 16:41:41 · 158 阅读 · 0 评论 -
彻底搞懂 MySQL 事务的隔离级别
MySQL的事务隔离级别一共有四个,分别是读未提交、读已提交、可重复读以及可串行化。文章目录事前准备数据事务并发可能出现的情况脏读(Dirty Read)不可重复读(Non-Repeatable Read)幻读(Phantom)事务的隔离级别读已提交(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)隔离级别的实现原理查看当前会话隔离级别设置隔离级别事前准备数据mysql> create table city( -> id原创 2020-09-04 13:46:06 · 779 阅读 · 1 评论 -
面试之redis事务
MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。 > 在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。EXEC命令会触发执行事务原创 2020-08-20 17:33:55 · 137 阅读 · 0 评论 -
面试, Mysql优化, MySQL性能优化的21个最佳实践
文章目录1. 为查询缓存优化你的查询2. EXPLAIN 你的 SELECT 查询3. 当只要一行数据时使用 LIMIT 14. 为搜索字段建索引5. 在Join表的时候使用相同类型的列,并将其索引6. 千万不要 ORDER BY RAND()7. 避免 SELECT \*8. 永远为每张表设置一个ID9. 使用 ENUM 而不是 VARCHAR10. 从 PROCEDURE ANALYSE() 取得建议11. 尽可能的使用 NOT NULL12. Prepared Statements13. 无缓冲的查询原创 2020-08-03 16:42:42 · 312 阅读 · 0 评论 -
Redis五种数据类型及应用场景, 原理加图解
一. 五种数据类型图解二. String类型string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。value其实不仅是String,也可以是数字。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据...原创 2020-04-25 21:01:52 · 742 阅读 · 0 评论 -
String,StringBuffer,StringBuild区别与联系
(1)string 1,Stirng是对象不是基本数据类型 2,String是final类,不能被继承。是不可变对象,一旦创建,就不能修改它的值。 3,对于已经存在的Stirng对象,修改它的值,就是重新创建一个对象,然后将新值赋予这个对象 不可改变的Unicode字符序列池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源 以减少存储空间的开销。在...原创 2020-04-17 11:22:24 · 224 阅读 · 0 评论 -
数据库重要的五个概念
1. 缓存与数据库一致性问题, 对着个问题深有体会, 这是之前美团面试官的问题, 当时的回答并没有答得多么好, 只说到了先删缓存再修改数据库, 以及线程加锁, 之后写了一篇博客深入学习了下, 分很多种情况, 在先操作数据库还是先操作缓存的问题上通用的是先淘汰缓存再写数据库, 缓存与数据库的操作的架构上的优化主流方案是, 增加一个服务层来向上层屏蔽数据访问与修改的细节., 非主流的是所有写操作走数据...原创 2020-04-15 08:54:30 · 381 阅读 · 0 评论 -
一致性Hash算法的原理
一. 背景随着业务的扩展,流量的剧增,单体项目逐渐划分为分布式系统。对于经常使用的数据,我们可以使用Redis作为缓存机制,减少数据层的压力。因此,重构后的系统架构如下图所示:简单架构优化最简单的策略就是,把常用的数据保存到Redis中,为了实现高可用使用了3台Redis(没有设置集群,集群至少要6台)。每次Redis请求会随机发送到其中一台,但是这种策略会引发如下两个问题:同一份数据可...原创 2020-04-04 10:22:57 · 219 阅读 · 0 评论 -
Redis 过期删除, 缓存淘汰, 缓存穿透, 缓存击穿, 缓存雪崩, 以及解决方案
一.缓存淘汰策略当redis内存超出物理内存限制时,会和磁盘产生swap,这种情况性能极差,一般是不允许的。通过设置 maxmemory 限制最大使用内存。超出限制时,根据redis提供的几种内存淘汰机制让用户自己决定如何腾出新空间以提供正常的读写服务。noeviction:当内存使用超过配置的时候会返回错误,不会驱逐任何键(默认策略,不建议使用)allkeys-lru:加入键的时候,如果过...原创 2020-04-02 13:21:13 · 412 阅读 · 0 评论 -
聚集索引、辅助索引、覆盖索引、联合索引, 最左前缀原则, 索引失效情况
一. 聚集索引(Clustered Index)聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的即为整张表的行记录数据。聚集索引的叶子节点称为数据页,每个数据页通过一个双向链表来进行链接,而且数据页按照主键的顺序进行排列。二. 辅助索引辅助索引(二级索引):叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录。三...原创 2020-04-01 22:42:21 · 929 阅读 · 0 评论 -
关于数据库索引, B-树, B+树, MySQL 索引实现原理
一.数据库的性能问题A. 磁盘IO性能非常低,严重的影响数据库系统的性能。B. 磁盘顺序读写比随机读写的性能高很多。二.数据的基本存储结构A. 磁盘空间被划分为许多大小相同的块(Block)或者页(Page).B. 一个表的这些数据块以链表的方式串联在一起。C. 数据是以行(Row)为单位一行一行的存放在磁盘上的块中,如图所示.D. 在访问数据时,一次从磁盘中读出或者写入至少一个完整...原创 2020-04-01 14:14:11 · 108 阅读 · 0 评论 -
数据库锁的详解, 共享锁, 更新锁, 排它锁, 意向锁, 加锁原理
一,锁的种类1.共享锁——Shared lock又称读锁(S锁),共享锁不阻塞其他事务的读操作,但阻塞写操作,同一数据对象A可以共存多个共享锁,这被称为共享锁兼容。当T1为数据对象A加上共享锁后,可以对A进行读操作,但不能进行写操作,并且T2可以再次对A加共享锁,大家都可以正常地读A,但是在A上的共享锁释放之前,任何事务不可以对A进行写操作。例1:T1:select * from tab...原创 2020-03-31 14:38:54 · 7883 阅读 · 2 评论 -
缓存与数据库一致性问题
面试问到这个, 对这方面了解很少, 回答是先删缓存, 再改数据库, 学习了一波, 这里面的思想还是很值得学习的(1)是更新缓存中的数据,还是淘汰缓存中的数据呢?当更新缓存的代价很小,此时我们应该更倾向于更新缓存,以保证更高的缓存命中率, 但是缓存中数据是通过复杂计算得出来的, 比如还得查询其他几张表的数据来计算时, 更新缓存的复杂度就远大于淘汰缓存淘汰缓存操作简单,并且带来的副作用只是增加了...原创 2020-03-28 14:16:25 · 136 阅读 · 0 评论 -
等值连接和自然连接的区别,三种连接的辨析:非等值连接,等值连接,自然连接
表P:A B1 2 2 1表 S: A B R:B C 1 2 2 1 3 3 7 2 5 9 ...原创 2019-03-22 18:21:16 · 42147 阅读 · 4 评论 -
连接查询:等值连接,自然连接,自身连接, 外连接(SQL)
在查询中,同时涉及两个或两个以上的表,要根据表中数据的情况作连接。示例:查询学习课程名为‘数学’的学生学号和姓名。select student.sno,snamefrom student,sc,coursewhere student.sno=sc.sno and sc.cno=course.cno and cname=‘数学’;一, 等值连接和自然连接等值连接(连接条件...原创 2019-03-22 18:13:53 · 15080 阅读 · 1 评论 -
数据库-表的定义与操作
数据类型char(n) 长度为n的定长字符串varchar(n) 最大长度为n的可变长字符串int 长整数(4字节)bigint 大整数 (8字节)boolean 逻辑布尔量date 日期, 包含年月日, 格式为yyyy-mm–ddtime 时间 包含时分秒, 格式为 hh:mm:ss建立基本表CREATE TABLE USERS(Ul...原创 2019-03-17 15:50:59 · 4552 阅读 · 1 评论 -
SQL Server无法连接解决方法
SQL Server连接失败第一步: 找到SQL sever 配置管理器, 一个红色的箱子图标第二步: 将SQLEXPRESS协议中的Named Pipes和 TCP/IP启用第三步: 点击SQL Server服务,将SQL Server(SQLEXPRESS)重新启动第四步:将SQL Server MSSQLSERVER 一项点击右键,选择启动第五步: 重新连接SQL...原创 2019-03-17 14:56:43 · 2814 阅读 · 2 评论 -
SQL,数据查询之单表查询,SELECT,WHERE, 聚集函数, GROUP BY, HAVING, ORDER BY
1. SELECT子句对应于关系代数中的投影运算, 用以列出查询结果集中的期望属性, 目标列的形式为列名, *, 算数表达式, 聚合函数。SELECTWHERE 聚集函数GROUP BY HAVINGORDER BY原创 2019-03-20 21:41:00 · 623 阅读 · 0 评论