MySQL
文章平均质量分 70
wingsless
我属于勤奋好学的人,有着很大的工作热情,喜欢在工作中寻找技术带给我的乐趣。
展开
-
Mysql的float类型造成的困扰总结
因为换了工作正在学习使用MySQL,今天领导提出了一个问题,如下: X列是累加值,A列是每日新增值,那么X2应该是X1+A1,而且存储过程里也是这样计算的。可是奇怪的是X2的值却总是和正确值(2396116766)有一定的差异。于是我手工进行了update,但是没有办法,数据永远是:2396116736。在我百思不得其解的时候我决定看看这个表怎么建立的,我发现这个字段是flo原创 2013-11-15 21:39:37 · 745 阅读 · 0 评论 -
InnoDB源码分析--缓冲池(二)
上一篇中我简单的分析了一下InnoDB缓冲池LRU算法的相关源码,其实说不上是分析,应该是自己的笔记,不过我还是发扬大言不惭的精神写成分析好了。在此之后,我继续阅读了Buf0rea.c文件,因为这里写的就是如何将block读取到内存中的函数。 这个文件里很显眼的有这样一个函数:buf_read_page,这是一个高层的函数,它的作用就是:reads a page asynchrono原创 2016-06-12 21:00:26 · 753 阅读 · 0 评论 -
innoDB源码分析--缓冲池
最开始学Oracle的时候,有个概念叫SGA和PGA,是非常重要的概念,其实就是内存中的缓冲池。InnoDB的设计类似于Oracle,也会在内存中开辟一片缓冲池。众所周知,CPU的速度和磁盘的IO速度相差可以用鸿沟来形容,因此聪明的前辈们使用了内存这个ROM来弥补这道鸿沟,那么数据库的设计者们也继承了这个优良的设计理念,在内存中开辟了一片区域,存放缓冲数据,提高数据库效率。 可以将磁原创 2016-06-12 20:59:01 · 502 阅读 · 0 评论 -
MySQL InnoDB表--BTree基本数据结构
MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据。 我最开始是搞Oracle的,头一次接触MySQL的时候,默认引擎还是MyISAM。当时我看到公司建立的所有的InnoDB表都会在第一列加一个业务无关的自增主键,我觉得很没有必要,问了些人这么做的意义,得原创 2015-12-12 22:05:12 · 718 阅读 · 0 评论 -
不好的MySQL过程编写习惯
刚才为了测试一个东西,写了个存储过程: delimiter $$ drop procedure if exists sp_test$$ create procedure sp_test() begin declare v_cnt int; set v_cnt = 0; while v_cnt 100000 do insert into t原创 2015-12-12 22:02:36 · 410 阅读 · 0 评论 -
MySQL的loose index scan
众所周知,InnoDB采用IOT(index organization table)即所谓的索引组织表,而叶子节点也就存放了所有的数据,这就意味着,数据总是按照某种顺序存储的。所以问题来了,如果是这样一个语句,执行起来应该是怎么样的呢?语句如下: select count(distinct a) from table1; 列a上有一个索引,那么按照简单的想原创 2015-12-12 22:29:40 · 454 阅读 · 0 评论 -
MySQL有关Group By的优化
昨天我写了有关MySQL的loose index scan的相关博文(http://www.cnblogs.com/wingsless/p/5037625.html),后来我发现上次提到的那个优化方法中主要的目的就是实现loose index scan,而在执行计划的层面上看,Extra信息中应该是“Using index for group-by”。这样看来,可能MySQL在处理distinct原创 2015-12-12 22:15:43 · 432 阅读 · 0 评论 -
从最近MySQL的优化工作想到的
最近决定将以前同事写的存储过程查看一遍,寻找一些代码上写的不太好的地方,争取进行修改以后让这些过程达到一个很好的运行速度。下面是遇到的最多的几个问题。 我遇到了这样的一个SQL: select name, count(*) from (select name from table_1) a group by a.name; MySQL的执行计划原创 2013-12-18 20:42:10 · 1873 阅读 · 0 评论 -
有关于存储过程的一个笑话
我真的是上来讲一个笑话的,这是个传统笑话,需要慢慢讲。 我同事离职以后,统计平台的所有代码就被我接过来了。这个统计平台是用MySQL搭建的,5.1版本,服务器是DELL的,有16个CPU和32G内存,700G的data空间,说真的这个配置对于我这种喜欢IOE的人来说实在是看不下去。 接过这个系统后我发现有一个过程需要跑三个小时,从前4点开始跑,到早上9点前也就出来了,于是也原创 2013-11-29 22:15:47 · 1586 阅读 · 0 评论 -
InnoDB源码分析--缓冲池(三)
昨天写到了InnoDB缓冲池的预读:《InnoDB源码分析--缓冲池(二)》,最后因为着急看欧洲杯,没有把线性预读写完,今天接着写。 线性预读是由这个函数实现的:buf_read_ahead_linear,和随机预读一样,首先是要确定区域边界,这个边界内被访问过的page如果达到一个阈值(BUF_READ_AHEAD_LINEAR_THRESHOLD),就会触发预读操作。边界的算法原创 2016-06-13 21:21:31 · 528 阅读 · 0 评论