![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 84
东东咚咚咚咚咚丶
饿了么后端工程师,一只不定期产粮的一线研发猿
展开
-
SQL重复记录查询
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 例二: select * from testtable转载 2014-02-20 11:02:59 · 1155 阅读 · 0 评论 -
深入解析Mysql 主从同步延迟原理及解决方案
MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢?1. MySQL数据库主从同...原创 2018-07-16 11:46:44 · 431 阅读 · 0 评论 -
MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)-转
锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。My...原创 2018-07-12 15:15:11 · 336 阅读 · 1 评论 -
MySQL 5.7新特性:并行复制原理(MTS)
众所周知,MySQL的复制延迟是一直被诟病的问题之一,在MySQL 5.7版本已经支持“真正”的并行复制功能,官方称为为enhanced multi-threaded slave(简称MTS),因此复制延迟问题已经得到了极大的改进。总之,MySQL 5.7版本后,复制延迟问题永不存在。一、MySQL 5.6并行复制架构从MySQL 5.6.3版本开始就支持所谓的并行复制了,但是其并行只是基...原创 2018-08-27 19:17:33 · 19433 阅读 · 5 评论 -
4种事务的隔离级别,InnoDB如何巧妙实现?
事务ACID特性,其中I代表隔离性(Isolation)。 什么是事务的隔离性?隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。 一个事务怎么会干扰其他事务呢?咱们举例子来说明,假设有InnoDB表:t(id PK, name); 表中有三条记录:1, shenjian2, zhan...原创 2018-08-30 18:49:00 · 333 阅读 · 0 评论 -
数据库索引,到底是什么做的?
近期写数据库,不少朋友留言问MySQL索引底层的实现,今天简单聊一聊,少讲“是怎么样”,更多说说“为什么设计成这样”。 问题1. 数据库为什么要设计索引? 图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去?于是,图书管理员设计了一套规则:(1)一楼放历史类,二楼放文学类,三楼放IT类…(2)IT类,又分软件类,硬件类…(3)软件类,又...原创 2018-08-29 10:40:13 · 1107 阅读 · 0 评论 -
1分钟了解MyISAM与InnoDB的索引差异
《数据库索引,到底是什么做的?》介绍了B+树,它是一种非常适合用来做数据库索引的数据结构:(1)很适合磁盘存储,能够充分利用局部性原理,磁盘预读;(2)很低的树高度,能够存储大量数据;(3)索引本身占用的内存很小;(4)能够很好的支持单点查询,范围查询,有序性查询; 数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index)。Inno...原创 2018-08-29 11:03:33 · 1126 阅读 · 0 评论 -
InnoDB,5项最佳实践,知其所以然?
第一篇,说说MySQL两个最常用的存储引擎,MyISAM和InnoDB。照自己的理解,把一些知识点总结出来,不只说知识点,多讲“为什么”。一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。 潜台词是,对于select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。 实践:数据量大的...原创 2018-08-29 16:11:37 · 255 阅读 · 0 评论 -
MySql表、索引设计参考规范
一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它 禁止使用存储过程,视图,触发器,Event 解读:(1)对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情,不要...原创 2018-08-29 16:27:15 · 4170 阅读 · 0 评论 -
Navicat Premium Mac 12 破解
经博主亲测,非常好用。给大家分享。穷人利器啊~~~去百度上各种搜索,发现了很多不靠谱的下载地址,真是坑B,坑死我了,经过一遍一遍的尝试,终于找到了破解方法!!!!!首先先声明一下,我特别痛恨那种骗人的网站,还口口声声说什么已破解。我要的是最新版,他标题是最新版,实际上却是老版本,反正各种骗人。特别是一些网站还要充钱才能下软件,我充nmlgb 第一步:这部分暂时存到文本编辑器中公...原创 2018-09-04 16:54:22 · 21218 阅读 · 41 评论 -
Mysql Find_IN_SET函数
今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻。语法:FIND_IN_SET(str,strlist)定义:1. 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。2. 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。3. 如果第一个参数是一个常...原创 2018-09-07 17:44:44 · 440 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(八)
InnoDB的主键选择与插入优化在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键。经常看到有帖子或博客讨论主键选择问题,有人建议使用业务无关的自增主键,有人觉得没有必要,完全可以使用如学号或身份证号这种唯一字段作为主键。不论支持哪种论点,大多数论据都是业务层面的。如果从数据库索引优化角度看,使用InnoDB引擎而不使用自增主键绝对是一个糟糕的主意。上文讨...原创 2018-06-08 11:49:46 · 288 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(七)
索引选择性与前缀索引既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引。第一种情况是表记录比较少,例如一两千条甚至只有几百条记录的表,没必要建索引,让查...原创 2018-06-08 11:49:03 · 307 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(六)
最左前缀原理与相关优化高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理。这里先说一下联合索引的概念。在上文中,我们都是假设索引只引用了单个的列,实际上,MySQL中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组,其中各个元素均为数据表的一列,实际上要严格定义索引需要用到关系代...原创 2018-06-08 11:48:15 · 238 阅读 · 0 评论 -
浅谈MySQL索引背后的数据结构及算法
摘要万分感谢原创人员:http://blog.linezing.com/?p=798#nav-1 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为原创 2016-01-15 14:58:09 · 505 阅读 · 0 评论 -
Mysql主从Java端实现
继昨天的Mysql主从的概述及基本的配置。今天趁着不是很忙的时候整理一下主从JAVA端的代码实现。下面开始贴代码:Spring MVC 的datasorce配置,这里我们使用的阿里的druid(德鲁伊)数据库连接池,先配置两个数据库链接池。分别连接主、从两个库。然后使用spring 的一个主要特性AOP切面编程来根据方法的前缀命名来选择是使用主数据库还是使用从数据库。(我选择切的是contro原创 2016-08-04 10:46:16 · 4778 阅读 · 2 评论 -
事务那些事
Transaction 也就是所谓的事务了,通俗理解就是一件事情。从小,父母就教育我们,做事情要有始有终,不能半途而废。 事务也是这样,不能做一般就不做了,要么做完,要么就不做。也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。于是,人们就归纳出事务的第一个特性:原子性(Atomicity)。我靠,一点都不神秘嘛。特别是在数据库领域,事务是一个非常重要...原创 2018-05-09 15:51:06 · 193 阅读 · 0 评论 -
数据库索引区别
1、普通索引 mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、...原创 2018-05-07 18:15:13 · 1398 阅读 · 0 评论 -
MySQL的InnoDB索引原理详解
摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出。 ...原创 2018-06-08 10:59:19 · 243 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(一)
索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,...原创 2018-06-08 11:43:07 · 389 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(二)
B-Tree和B+Tree目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构,在本文的下一节会结合存储器原理及计算机存取原理讨论为什么B-Tree和B+Tree在被如此广泛用于索引,这一节先单纯从数据结构角度描述它们。B-Tree为了描述B-Tree,首先定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同数据记录,key是互不相同的;da...原创 2018-06-08 11:44:20 · 776 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(三)
为什么实用B-Tree(B+Tree)上文说过,红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构,这一节将结合计算机组成原理相关知识讨论B-/+Tree作为索引的理论基础。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个...原创 2018-06-08 11:45:15 · 445 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(四)
MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:图8这里设表一共有三列,假设我们以Col1为主键,则图8是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是...原创 2018-06-08 11:46:41 · 706 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理(五)
InnoDB索引实现虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键...原创 2018-06-08 11:47:21 · 269 阅读 · 0 评论 -
EXPLAIN 命令详解
在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时...原创 2018-09-07 17:48:12 · 346 阅读 · 0 评论