
数据库
文章平均质量分 79
数据库
jushisi
一点点好奇心,一点点求知欲
展开
-
数据库的隔离机制原理
https://www.cnblogs.com/wyaokai/p/10921323.html文章目录转载 2021-03-12 21:31:40 · 1345 阅读 · 0 评论 -
逻辑删除记录时,如何保证业务的唯一性约束
一、业务背景通常业务系统的一些记录表都会有一些唯一性约束,例如相同用户下不允许重名;通常可以对指定列创建唯一性索引即可,例如:CREATE TABLE `novel`( `id` bigint(20) NOT NULL AUTO_INCREMENT, `novel_id` bigint(20) DEFAULT NUL转载 2021-03-06 13:42:52 · 1137 阅读 · 0 评论 -
缓存与数据库双写一致性如何解决?先操作数据库,还是缓存?
文章目录一、数据缓存1、为何要使用缓存2、哪类数据适合缓存3、缓存的利与弊二、如何保证缓存和数据库一致性1、不更新缓存,而是删除缓存2、先操作缓存,还是先操作数据库先删缓存,再更新数据库先更新数据库,再删缓存优先“先更新数据库,再删缓存”3、非要保证数据库和缓存数据强一致该怎么办缓存延时双删三、总结一、数据缓存1、为何要使用缓存在我们实际的业务场景中,一定有很多需要做数据缓存的场景,比如售卖商品的页面,包括了许多并发访问量很大的数据,它们可以称作是是“热点”数据,这些数据有一个特点,就是更新频率低,读转载 2021-01-24 17:37:14 · 215 阅读 · 0 评论 -
《高性能MySQL》---- 复制
复制概述MySQL支持两种复制方式:基于行的复制和基于语句的复制。复制通常不会增加主库的开销,主要是启用二进制日志带来的开销,但出于备份或及时从崩溃中恢复的目的,这点开销也是必要的。通过复制可以将读操作指向备库来获得更好的读扩展,但对于写操作,除非设计得当,否则并不适合通过复制来扩展写操作。在一主库多备库的架构中,写操作会被执行多次,这时候整个系统的性能取决于写入最慢的那部分。当使用一主库多备库的架构时,可能会造成一些浪费,因为本质上它会复制大量不必要的重复数据。例如,对于一台主库和10台备库,会有1原创 2021-01-23 17:36:25 · 300 阅读 · 0 评论 -
《高性能MySQL》---- 查询性能优化
文章目录一、慢查询基础:优化数据访问二、重构查询的方式三、M查询执行查询优化、素引优化、库表结构优化需要齐头并进,一个不落。一、慢查询基础:优化数据访问确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能是访问了太多的列。确认MySQL服务器层是否在分析大量超过需要的数据行。即扫描了过多的数据。二、重构查询的方式一个复杂查询还是多个简单查询:设计查询的时候一个需要考虑的重要问题是,是否需要将一个复杂的查询分成多个简单的查询。切分查询:有时候对于一个大查询我原创 2021-01-22 15:51:56 · 198 阅读 · 0 评论 -
《高性能MySQL》---- MySQL索引
文章目录一、索引的优缺点优点缺点二、B-Tree索引1、B-Tree2、B+Tree(InnoDB的实现)三、哈希索引四、InnoDB里根据索引功能分为:聚簇索引和普通索引1、聚簇索引2、普通索引请看如下示例:**回表查询****索引覆盖**一、索引的优缺点优点索引大大减小了服务器需要扫描的数据量索引可以帮助服务器避免排序和临时表索引可以将随机IO变成顺序IO缺点虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MyS原创 2021-01-22 10:50:02 · 166 阅读 · 0 评论 -
MySQL的limit分页,为什么越往后翻越慢,怎么解决?
什么是limit分页问题select * from table limit 0,10 扫描满足条件的10行,返回10行。但当执行select * from table limit limit 800000,20 的时候数据读取就很慢,limit 800000,20的意思扫描满足条件的800020行,扔掉前面的800000行,返回最后的20行,可想而知这时会很慢,如下图,达到37.44秒之久。怎么解决利用表的覆盖索引来加速分页查询。我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引转载 2021-01-21 16:05:01 · 2240 阅读 · 0 评论 -
MySQL的InnoDB、MyIASM引擎
InnoDB引擎、MyIASM引擎InnoDB 引擎:MySQL 5.1 后默认的数据库引擎,提供了对数据库 ACID事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发原创 2021-01-09 23:04:41 · 135 阅读 · 0 评论 -
数据库事物和分布式事物
文章目录数据库事务数据库事务的特性事物隔离级别脏读、不可重复读、幻读分布式事务分布式事务产生的原因Service 多个节点Resource多个节点分布式事物基础CAP定理BASE理论一、2PC (两阶段提交)二、3PC (三阶段提交)三、TCC(`Try - Confirm - Cancel`)数据库事务数据库事务的特性原子性(Atomicity )、一致性( Consistency )、隔离性( Isolation)和持久性(Durabilily),简称就是ACID。Atomicity(原子性转载 2021-01-09 22:24:47 · 669 阅读 · 0 评论 -
三种 MySQL 大表优化方案
问题概述使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视。原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!!我尝试解决该问题,so,有个这个日志。方案概述方案一:优化现有mysql数据库。优点:不影响现有业务,源程序转载 2020-09-18 11:12:04 · 657 阅读 · 1 评论 -
简单的mysql存储过程,批量插数据
drop PROCEDURE IF EXISTS insertLabel;CREATE PROCEDURE insertLabel (in size int) BEGIN DECLARE i int; DECLARE label_name VARCHAR(100); DECLARE label_value VARCHAR(10); set i = 0; WHILE i<size DO set label_value = floor(RAND()原创 2020-08-20 20:09:35 · 112 阅读 · 0 评论 -
Java面试之数据库
164. 数据库的三范式是什么?第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。第三范式:任何非主属性不依赖于其它非主属性。表类型如果是 MyISAM ,那 id 就是 8。表类型如果是 InnoDB,那 id 就是 6。165. 一张自增表里面总共有 7 条数...转载 2020-04-29 16:03:12 · 267 阅读 · 0 评论 -
两张表联合查询为何没有用上索引?
我有两张表,一张叫teacherInfo,一张叫departmenInfo两张表有一个相同的字段,叫depnum,两张表都以这个字段建立了索引,可是我执行以下语句时,departmenInfo要进行全表扫描。SELECT TA.* FROM teacherInfo TA,departmenInfo TB WHERE TA.depnum=TB.depnum如果把两个表的位置改改如下,又变成teacherInfo要全表扫描:SELECT TA.* FROM departmenInfo TB,teache转载 2020-07-16 16:23:46 · 611 阅读 · 0 评论 -
常见的SQL优化
一、针对SQL语句的优化1.查询语句中尽量不适用 *2.尽量减少子查询,使用关联查询(left join,right join,inner join)替代3.减少使用IN或者NOT IN,使用exists,not exists或者关联查询语句替代4.使用union或者union all代替or查询(确认没有重复数据或者不用剔除重复数据时,union all性能更好,解释器不用再扫描一遍表挑选重复)5.建表的时候能使用数字类型字段就不要使用字符串,数字类型的字段作为查询条件比字符串快。6.那些能过转载 2020-06-17 16:17:56 · 776 阅读 · 0 评论 -
Insert into select语句慎用、force index强制使用指定索引
前言Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使用网络I/O,直接使用SQL依靠数据库I/O完成,这样简直不要太棒...转载 2020-04-27 14:31:01 · 2363 阅读 · 1 评论