数据库技术
文章平均质量分 81
coreyhsu2020
公众号:锦秋聊学习
展开
-
Mysql自定义变量在递归遍历中的妙用
Mysql自定义变量在递归遍历中的妙用原创 2023-01-30 17:52:50 · 813 阅读 · 1 评论 -
Mysql中B+tree叶子节点链表结构解析
MySQL数据库中innodb引擎的B+Tree的底部到底时单向链表还是双向链表?在网上搜索这类问题,得到的方案有两种,一种是单向,一种是双向。所以到底哪个是对的呢?今天就来彻底解密真实情况 页的概念 Mysql的innodb是以页为存储单位的,每个B+Tree的叶子节点都是一个页的大小的倍数,默认一页的大小是16K 页结构如下图所示 也就是每一个页都包含两个页指针,一个是previous page指针,指向上一个页,一个是next page指针,指向下一个页。...转载 2022-05-26 09:56:21 · 4082 阅读 · 3 评论 -
联合索引在B+树上的存储结构及数据查找方式
引言上一篇文章《MySQL索引那些事》主要讲了MySQL索引的底层原理,且对比了B+Tree作为索引底层数据结构相对于其他数据结构(二叉树、红黑树、B树)的优势,最后还通过图示的方式描述了索引的存储结构。但都是基于单值索引,由于文章篇幅原因也只是在文末略提了一下联合索引,并没有大篇幅的展开讨论,所以这篇文章就单独去讲一下联合索引在B+树上的存储结构。本文主要讲解的内容有:联合索引在B+树上的存储结构 联合索引的查找方式 为什么会有最左前缀匹配原则在分享这篇文章之前,我在网上查了关于MySQ转载 2022-05-19 00:29:36 · 1104 阅读 · 0 评论 -
详解 MySql InnoDB 中意向锁的作用
前言InnoDB 支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,而意向锁就是其中的一种表锁。意向锁(Intention Locks)需要强调一下,意向锁是一种不与行级锁冲突表级锁,这一点非常重要。意向锁分为两种:意向共享锁(intention shared lock, IS):事务有意向对表中的某些行加共享锁(S锁) -- 事务要获取某些行的 S 锁,必须先获得表的 IS 锁。SELECT column FROM table ..转载 2021-08-01 17:26:04 · 536 阅读 · 0 评论 -
索引失效原理,终于有人讲明白了
前言吊打面试官又来啦,今天我们讲讲MySQL索引为什么会失效,很多文章和培训机构的教程,都只会告诉你,在什么情况下索引会失效。比如:没遵循最佳左前缀法则、范围查询的右边会失效、like查询用不到索引等等但是没有一个人告诉你,索引失效的原理是什么,老哥今天就告诉大家,让你们知其然,还要知其所以然。单值索引B+树图单值索引在B+树的结构里,一个节点只存一个键值对联合索引开局一张图,由数据库的a字段和b字段组成一个联合索引。MySQL技术内幕 Inn..转载 2021-07-24 16:15:00 · 372 阅读 · 1 评论 -
深入理解乐观锁与悲观锁
在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、tair等都有类似的概念。针对于不同的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲转载 2021-03-27 20:35:22 · 165 阅读 · 0 评论 -
漫谈MySql中的事务
最近一直在做订单类的项目,使用了事务。我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持。这篇文章我们一起来扒一扒事务相关的知识。为什么要有事务? 事务广泛的运用于订单系统、银行系统等多种场景。如果有以下一个场景:A用户和B用户是银行的储户。现在A要给B转账500元。那么需要做以下几件事: 1. 检查A的账户余额>500元; 2. A账户扣除500元; 3. B账...转载 2021-03-27 20:12:42 · 120 阅读 · 0 评论 -
MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行。那么,你觉得这个数值多少才合适呢?曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万行,性能会明显下降。事实上,这个传闻据说最早起源于百度。具体情况大概是这样的,当年的 DBA 测试 MySQL性能时发现,当单表的量在 2000 万行量级的时候,SQL 操作的性能急剧下降,因此,结论由此而来。然后又据说百度的工程师流动到业界的其它公司,..转载 2021-03-07 12:27:34 · 274 阅读 · 0 评论 -
mysql中count的相关知识总结
相关知识引入COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL对他进行了很多优化,MyISAM中会直接把表的总行数单独记录下来供COUNT(*)查询,而InnoDB则会在扫表的时候选择最小的索引来降低成本。当然,这些优化的前提都是没有进行where和group的条件查询。同时,count(*)也是阿里强制的,那到底count(*),count(1),count(主键ID),count(字段)这几种方式存在什么差别呢?(以下为摘录自:mysql的count)Count(*)的实现方式转载 2021-03-07 12:09:42 · 163 阅读 · 0 评论 -
关于缓存冷启动以及缓存预热的相关方案分析
在研读关于缓存相关的文章过程中,发现和缓存冷启动以及缓存预热这几点还讲解的可以,虽然说的有点笼统,但是方案大致还算明白了,以下为摘录内容,可以研读。1.缓存冷启动以及缓存预热解决方案当系统第一次启动,大量请求涌入,此时的缓存为空,可能会导致DB崩溃,进而让系统不可用,同样当redis所有缓存数据异常丢失,也会导致该问题。因此,可以提前放入数据到redis避免上述冷启动的问题,当然也不可能是全量数据,可以根据类似于当天的具体访问情况,实时统计出访问频率较高的热数据,这里热数据也比较多,需要多个服务并行转载 2021-03-04 23:56:02 · 718 阅读 · 1 评论 -
MySQL InnoDB 的加锁分析
前面写了一篇 MySQL 的 2PL 文章《8 张图,给你完整的剖析 MySQL 两阶段加锁(2PL)协议》,群里有人@我关于 MySQL 的加锁问题,事实上 MySQL 的加锁过程非常的复杂,2PL 只是一个最简单,最容易理解的一个!今天,再介绍几种加锁的思路,如有误忽喷!推荐大家阅读高性能 MySQL。背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准转载 2021-01-17 23:29:01 · 202 阅读 · 0 评论 -
关于mysql事务和隔离级别以及并发控制问题原理解析
最近在碰到和Mysql事务、锁、隔离级别等相关的知识点,这里作一个汇总,主要是分析mysql在有共享锁,排他锁的情形下,是如何保证其高并发性能(主要利用了存储引擎的MVCC多版本并发控制),下面列出作具体说明参考链接:一致性非锁定读与一致性锁定读(易于理解);MYSQL一致性非锁定读和锁定读;理解 MySQL 一致性非锁定读原理;漫谈MySql中的事务(非常易懂)另外,还有一个问题,就是关于事务隔离级别是怎么解决对应问题的。如RC如何解决不可重复读问题:利用的是快照的一致性非锁定读.原创 2020-12-29 10:11:33 · 201 阅读 · 0 评论 -
分布式缓存一致性问题解决方案
该文章主要是来自于通用配置系统使用了文件缓存作为二级缓存,他的一致性如果保证的问题,目前了解到的有三种方案:1.服务发现(注册中心,利用类似zookeeper来协调各个缓存实例节点)2.采用队列方式,将更新作为消息放入mq中进行消费(新增一个线下的读binlog的异步模块)3.过期时间另外一种设计本地缓存与redis缓存的机制流程图主要参考以下文章1.分布式缓存的一致性问题2.聊聊轻量级本地缓存设计3.缓存同步、如何保证缓存一致性、缓存误用...原创 2020-08-22 21:27:03 · 2114 阅读 · 0 评论 -
关于mysql为什么要分表的一些思路
文章一:问题描述 为什么进行分表? 分库? 一般多少数据量开始分表? 什么是数据库垂直拆分和水平拆分 回答为什么要进行分库业务发展,当单个数据库中的表越来越多,数据量越来越大的时候。数据的增删改查所消耗的资源就会增加。由于mysql是无法分布式部署(可能会有人说不是有主从吗?并不是,详细会在其他文章说明)的。==而单台服务器的资源,如CPU、磁盘、内存、IO等都是有限的。最终数据库所承载的数据量和处理数据的能力就会遇到瓶颈==。此时有两种解决方案: 横向扩原创 2020-08-22 21:20:43 · 972 阅读 · 3 评论 -
针对mysql的RR级别的幻读问题的分析与理解
由于最近被这个幻读的问题给困扰,所以想整明白点,主要就是幻读和不可重复读的区别以及幻读的实际使用场景。翻了一些文章,众说纷纭,我大概抽了几篇我觉得不错的文章来说。不可重复读主要还是说的update和delete,他针对的是同一次查询的数据,而幻读则针对的是insert(T1第一次查没有这条记录然后准备insert,T2此时insert,T1接着insert,发现无法插入,这就是幻读,另外还有一种针对幻读的解释就是两次查询数量不一致问题)目前我觉得说的比较清楚的是这篇文章:不扯概念,用例子演示什么是脏原创 2020-08-15 16:20:56 · 544 阅读 · 0 评论 -
MySQL索引原理及慢查询优化【美团技术团队】
背景MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。本人从2013年7月份起,一直在美团转载 2020-06-14 16:22:41 · 1069 阅读 · 0 评论 -
MongoDB之父:MongoDB胜过BigTable
本文来自:http://www.oschina.net/news/18683/mongodb-better-than-bigtable 10gen公司CEO Dwight MerrimanDwight Merriman在1996年与人共同创办DoubleClick公司,并担任首席技术官一职十年。Dwight Merriman的目标是构建一个类似于Google App Engin转载 2011-06-08 23:21:00 · 920 阅读 · 0 评论 -
SQL Server 合并(删除)分区解惑
SQL Server 合并(删除)分区解惑转载 2010-11-05 17:10:00 · 571 阅读 · 0 评论 -
MYSQL 小技巧 -- LAST_INSERT_ID
用PHP调用mysql , 内置的LAST_INSERT_ID() 这个函数可能没有什么人用,用的最多的还是 mysql_insert_id();其实,这两个是有区别的,LAST_INSERT_ID() 能返回 bigint 值的id。而,mysql_insert_id 返回的是 int 。如果你的id 是 unsigned int,或者 bigint 的 。那么,可能是返回的是错误的。而要用 LAST_INSERT_ID() 代替。转载 2010-11-05 16:51:00 · 781 阅读 · 0 评论 -
mysql 性能优化(二)
今天突然看到一年前写的 mysql 优化(一) ,感觉有些误人子弟。今天再补充一些东西。关于引擎选择,从理论上 和 实际上 可能会有差距,所以,对待mysql 要有实验精神。一般来说,MYisam 适合:1. 做很多count 的计算。2. 插入不平凡,查询非常频繁。3. 没有事务转载 2010-11-05 16:50:00 · 717 阅读 · 0 评论 -
mysql 优化系列(一) Mysql数据库引擎性能测试
Mysql 数据库中,最常用的两种引擎是innordb和myisam。Innordb的功能要比myiasm强大很多,但是innordb的性能要比myisam差很多,如果你的网站只是做简单的查询,更新,删除,那么用myiasm是最好的选择。转载 2010-11-05 16:50:00 · 1020 阅读 · 0 评论 -
SQL Server 2005无法连接问题的解决办法
在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接原创 2010-12-24 22:21:00 · 4244 阅读 · 0 评论 -
mysql多台服务器数据同步
mysql多台服务器数据同步转载 2010-09-15 09:51:00 · 5837 阅读 · 0 评论 -
一个MYSQL语句的疑问
一个关于ORDER BY与GROUP BY使用的误区问题原创 2010-09-12 15:07:00 · 496 阅读 · 0 评论 -
Mysql重要发现
Mysql重要发现原创 2010-08-21 15:28:00 · 596 阅读 · 0 评论 -
关于数据库中的JOIN的用法学习
问题来源于我在帮网友修改一个系统BUG时出现的,一直没发现这个问题,就是LEFT JOIN 与 INNER JOIN的区别,刚才在群里讨论后还特意看了书,在网上看了下大家的分享,现在大概明白了。我的SQL语句是这样的:SELECT D.username AS username,D.uid AS uid_d,C.webname,C.uid AS uid_c FROM qb_blog_home原创 2012-03-18 12:17:49 · 11913 阅读 · 1 评论 -
让数据库变快的10个建议
大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。 0. 小心设计数据库第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库列中的例子。对于系统和用转载 2012-03-22 13:16:03 · 860 阅读 · 0 评论 -
关于memcache与redis的内存分配与碎片回收机制
1.理解memcached的内存存储机制 Memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached进程本身还慢。Slab Allocator就是为解决该问题而诞...原创 2019-03-14 01:19:01 · 1565 阅读 · 0 评论 -
[仅供个人参考系列]MySQL调优
为什么要进行优化?避免由数据库链接timeout产生页面5xx的错误避免由于慢查询造成页面无法加载避免由于阻塞造成数据无法提交优化用户体验可以从哪几个方面进行数据库优化?image从图中可以看出,SQL及索引的优化是最重要的,成本最低效果最好。下面分别来看看如何优化SQL和索引。SQL优化慢查询日志配置可以使用慢查询日志对有效率问题的SQL进行监控。下面是关于如何开启慢查询日志和慢查询日志的一些配...转载 2018-03-25 15:59:05 · 244 阅读 · 0 评论 -
mysql分析函数的实现(阿里DBA博客,大开眼界)
今天收到同事的一需求,要求实现以下功能:drop table test;create table test(name varchar(10),name1 varchar(10),count bigint);delete from test;insert into test values(’1′,’a',2);insert into test values(’转载 2014-10-18 12:33:44 · 3248 阅读 · 0 评论 -
mysql行转列(综合利用if + sum)---为解决OSC的一个朋友的问题
mysql用sum+if 完成行转列(行表数据如下)首先思考如何创建出列结构[sql] view plaincopySELECT NAME AS '姓名', IF(type = '语文', score, 0) AS yuwen, IF(type = '数学', score, 0) AS转载 2014-03-21 19:06:15 · 9450 阅读 · 2 评论 -
关于mysql的时间存储类型问题
前段时间碰到一个网友问我关于mysql的时间为什么要用int型来存储而不用datatime类型,我懵了一下,然后在网上找了找,这几篇都还不错:mysql中timestamp,datetime,int类型的区别与优劣原创 2014-04-22 18:11:23 · 1110 阅读 · 0 评论 -
解决一个mysql关于按文章以及评论的最早时间的排序问题
问题是:有个文章列表要显示文章 如果文章时间发布的越近的越靠前 时间一样看评论 如果评论越近的越靠前,有点像论坛的帖子列表抽象出来的问题就是:按 time1,time2中较大者的顺序排列 ,要使查询结果的ID顺序为:43521经过群里的讨论,得出以下一些答案:SELECT * FROM `te` ORDER BY time1 DESC,time2原创 2014-03-07 12:46:09 · 2911 阅读 · 0 评论 -
关于将EXCEL文件导入到MYSQL数据库的一些方法
昨天因为老师这边需要,就涉及到了这个东西,其实最后还是老师给我的链接,以后要自己多动动脑具体方法参考了:http://blog.163.com/six-lhf@126/blog/static/1992123220090410141011/(后面发现下面还有篇文章,感觉更好操作一点,GOOGLE关键字 excel 导入mysql)1.将选中的数据快儿拷贝到一个TXT文本文转载 2013-10-30 19:51:48 · 93807 阅读 · 1 评论 -
SQL优化总结
http://www.cnblogs.com/baiyu/archive/2011/09/21/2183809.htmlhttp://www.cnblogs.com/zengxiangzhan/archive/2009/12/04/1617186.html /*常见优化建议*/ 1、UNION会对结果进行排序,尽量用UNION ALL 替换(比如在不可能有重转载 2013-08-17 16:19:25 · 752 阅读 · 0 评论 -
mysql-性能,命令-explain,show processlist,show
mysql-性能监控和调优mysql-优化 show statusmysql-性能设置mysql-index-索引mysql-sql-语句mysql-精华◆Mysql Explain 详解一.语法explain 例如: explain select * from t3 where id=3952602;转载 2012-03-22 12:43:05 · 841 阅读 · 0 评论