mysql
猫球球
一年测试,一年前端,一年java。
最后决定在java的路上蹒跚前行。
展开
-
【学习笔记】多版本并发控制
mysql的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,他们一般都同事实现了多版本并发控制。不仅是mysql, oracle, postgresql等其他数据库系统也都实现了mvcc,但各自的实现机制不尽相同,因为mvcc没有一个统一的实现标准。可以认为mvcc是行级锁的一个变种,但是它在很多情况下避免了枷锁操作,因此开销更低。虽然实现即时有所不同,但原创 2017-04-08 16:28:14 · 552 阅读 · 0 评论 -
【学习笔记】mysql的查询状态
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。对于一个mysql连接,或者说一个线程,任何时刻都有一个状态,该状态表示了mysql当前正在做什么。有很多种方式能查看当前的状态,最简单的是使用show full processlist命令(该命令返回结果中的command列就表示当前的状态。)在一个查询的生命周期中,状态会变化很多次。my原创 2017-05-02 18:32:05 · 526 阅读 · 0 评论 -
【学习笔记】mysql查询执行的基础
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。mysql执行一个查询的过程,到底做了什么? 1. 客户端发哦送一条查询给服务器。2. 服务器先检查查询缓存,如果命中缓存,则理科返回存储在缓存中的记过。否则进入下一阶段。3. 服务器进行SQL解析,预处理,再由优化器生成对应的执行计划。4. MY原创 2017-05-04 14:19:57 · 1036 阅读 · 0 评论 -
【学习笔记】mysql查询优化器的局限性
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。mysql的万能“嵌套循环”并不是对每种查询都是最优的。不过还好,mysql查询优化器只对少部分查询不适用,而且我们往往可以通过改写查询让mysql高效的完成工作。而5.6以后会消除很多mysql原本的限制,让更多的查询能够以尽可能高的效率完成。关联子查询mysql的子查询实现的是很糟糕原创 2017-05-04 16:57:14 · 522 阅读 · 0 评论 -
【疑难杂症】百万级数据跨表数据统计和计算
产品提交了一个方案,要做一个以我们的表和职位表为基础,统计计算每个职位、地区、薪资区间、工作年限、学历的数据数量,并计算平均薪资,和总数占比的统计信息产品。逻辑并不复杂,比较困难的地方在于,这两张表都是我们业务的核心表,数据量庞大,其中简历表大概有180w可用数据。更困难的是,学历和工作年限这两个数据并不在简历表上而在个人信息表上。这就疯了,个人信息表起码有3000w的数据,如果一条一条组装,...原创 2018-08-24 15:11:14 · 1346 阅读 · 0 评论 -
【mysql】mysql索引探索(一)-- 为什么使用B+ Tree作为索引的结构
什么是索引在百度上查找索引的时候,很多回答会是:数据库就像是一本书,索引就像是他的目录,我们通过索引可以很快的定位到我们要找的数据。这话说的通俗易懂,一点没错。但是如果要说的更确切一点,那么应该这么表达:索引是为了加速对表中数据行检索而创建的一种分散的数据结构。首先索引的存在是为了加速对表中数据行的检索,其次他是分散的,最后他是一种数据结构。所以我们说正确的创建索引是提升数据库...原创 2018-11-07 22:31:58 · 3161 阅读 · 2 评论 -
【mysql】mysql索引探索(二)-- B+Tree索引在Mysql中的体现形式
我们都知道在mysql中有两种常用的引擎,MyISAM和InnoDB,这两种引擎是不一样的。但是这两种索引如何不一样呢?MyISAMmyisam引擎的表会生成三个文件,.frm,.MYD 和 .MYI.其中.frm里面存储了表定义文件,比如表有哪些字段,字段是如何修饰的。然后.MYD会是一个数据文件,也就是下图右边的图,你的数据行数什么的全都保存在.MYD文件中。所有的索引全部...原创 2018-11-07 23:20:38 · 293 阅读 · 0 评论 -
【mysql】mysql索引探索(三)-- 高性能使用索引的策略
既然我们已经对索引的本质有所了解,那么我们就应该来讨论如何高性能的使用引擎。1. 列的离散性越高,选择性越好。列的离散性是这样定义的:count(discount col):count(col),也就是不同的列数比列的总数。这个数值越大说明列的离散型就越好。如果用离散性很低的列,比如性别来做索引,你会发现大家都只有两种值(男和女),这样其实你根本不知道应该往那条路走,区别度太低,选择性...原创 2018-11-08 12:41:31 · 427 阅读 · 0 评论 -
【mysql】mysql索引探索(四)-- 整理一下索引的其他知识点
1. 索引列的数据长度能少则少。(能节省空间,长度越少就说名关键字能保存的越多)2. 索引不一定是越多越好越全越好,一定是建合适。(因为需要维护,插入的时候需要所有索引都维护到)3. 匹配列前缀可用到索引 like 999%, like %9999%和like %9999是无法使用索引的。(最左匹配原则)4. where条件中 not in 和<>操作无法使用索引。(同上)...原创 2018-11-08 12:56:20 · 260 阅读 · 0 评论 -
【学习笔记】查询性能优化:重构查询方式
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。在优化有问题的查询时,目标应该是找一个更优的方法获得实际需要的结果——而不一定总是需要从mysql获得一模一样的结果集。有时候可以将查询转换一种写法让其返回一样的记过的但是性能更好。但也可以通过修改应用代码,用另一种方式完成查询,最终达到一样的目的。一个复杂查询还是多个简单查询设原创 2017-05-02 17:49:36 · 684 阅读 · 0 评论 -
【学习笔记】查询性能优化:优化数据访问
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。查询性能低下最基本的云因是访问的数据太多。某些查询可能不可避免地需要筛选大量数据,但这并不常见。大部分性能地下的查询都可以通过减少访问数据量的方式进行优化。对于低效的查询,我们通常发现通过下面两个步骤来分析总是有效的:1. 确认应用成熟是否在检索大量超过需要的数据。这通常意味着访问了太多行,原创 2017-05-02 17:13:27 · 420 阅读 · 0 评论 -
【学习笔记】《高性能MYSQL》对性能优化定义
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。在《高性能mysql》中将西能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间。按照这个定义,我们通过任务和时间而不是资源来测量性能。原因是数据库服务器的目的是执行SQL语句,所以它关注的任务是查询或者语句,如SELECT、UPDATE、DELETE等。数据库服务器的性能用查询的响应原创 2017-04-08 16:59:14 · 467 阅读 · 0 评论 -
【学习笔记】选择优化数据类型的原则
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。mysql支持非常多的数据类型,选择正确的数据类型对于获得高性能至关重要。不管存储哪种类型的数据,下面几个简单原则都有助于做出更好的选择:1. 更小的通常更好;一般情况下,应该尽量使用可以正确存储数据的最小数据类型(例如只要存0~200, tinyint unsigned更好原创 2017-04-08 18:09:39 · 720 阅读 · 0 评论 -
【学习笔记】mysql中的数据类型(一)
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。整数类型mysql中可用的整数类型有以下几种:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT,分别使用9,16,24,32,64位存储空间。他们可以存储的值的范围是从-2的n-1次方到2的n-1次方-1,其中N是存储空间的位数。整数类型可选的uns原创 2017-04-09 15:00:33 · 543 阅读 · 0 评论 -
【学习笔记】mysql中的数据类型(二)
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。日期和时间类型mysql可以适用许多类型来保存日期和时间值,例如YEAR和DATE。mysql能存储的最小时间粒度为秒(MariaDB支持微秒级别的时间类型)。但是mysql可以适用微秒级别的粒度进行临时运算。DATETIME和TIMESTAMP是mysql提供的两种相似的日期累原创 2017-04-09 16:35:13 · 444 阅读 · 0 评论 -
【学习笔记】选择标识符
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。为标识列选择合适的数据类型非常重要。一般来说更可能用标识列与其他值进行比较(例如股关联操作中),或者通过标识列寻找其他列。标志列也可能在另外的表中作为外键使用,所以为标识列选择数据类型时,应该选择跟关联表中的对应列一样的类型。整数类型通常是标识列最好的选择,因为它们很快并且可以适用AUT原创 2017-04-09 17:12:15 · 480 阅读 · 0 评论 -
【学习笔记】mysql schema设计中的陷阱
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。太多的列mysql的存储引擎API工作时需要再服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后再服务器层将缓冲的内容解码成各个列。从行缓冲中将编码过的列转换成行数据结构的操作代价非常高。太多的关联所谓的“实体-属性-值”(EAV)设计模式是一个常见的糟糕的设计模式,尤其是原创 2017-04-09 17:33:15 · 365 阅读 · 0 评论 -
【学习笔记】范式与反范式
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。在对比这两者之前,首先我们需要温习一下范式和反范式的定义。范式定义:百度百科地址-http://baike.baidu.com/link?url=mhTRJ8KmzzT_cCIoIEKF_TznlLaBGvEaEk3LCavoK-bLh9lO0etcJSnX05Zmk8iwgKW8FUh原创 2017-04-09 18:10:29 · 468 阅读 · 0 评论 -
【学习笔记】mysql创建高性能索引(一)-索引基础
本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。 索引有很多种类型,可以为不同的场景提供更好的性能。在MYSQL中,索引实在存储引擎层而不是服务器层实现的。不同的索引种类也有不同的优缺点:B-Tree索引当我们谈论索引的时候,如果没有特别指明类型,那多半说的是B-TREE索引,它使用B-Tree数据结构来存储数据(实际上很多存储引擎用的是B+Tr...原创 2017-04-09 19:47:20 · 353 阅读 · 0 评论 -
【疑难杂症】【mybatis】mybatis字符串对比问题
这个问题其实之前遇到过,但是当时没有记录下来,昨天又遇到了,正好记一下。昨天的场景如下:select columnfrom table where id>0<if test="status == '1'"> and condition1</if><if test="status == '2'"> and conditi...原创 2018-11-21 12:45:36 · 859 阅读 · 1 评论