从排序原理到MYSQL中的排序方式
本文参考MYSQL官方文档,算法书籍,部分为自己观点可能有误,如果有误请指出共同参考转载请说明出处,谢谢!一、MYSQL排序可能用到的排序算法从MYSQL官方文档和源码的接口来看MYSQL使用BUFFER内部快速排序算法,外部多路归并排序算法,相应的接口函数为filesort()函数,注意filesort()是一个总的接口,归并排序也包含...
从顺序随机I/O原理来讨论MYSQL MRR NLJ BNL BKA
从顺序随机I/O原理来讨论MYSQL MRR NLJ BNL BKA本文只讨论innodb存储引擎,并且有部分观点为作者观点,如果有误请指出。一、机械磁盘原理 机械盘由动臂,盘片,读写磁头,主轴组成,磁头是固定不能动的,要读取相应的扇区只能通过盘片的 旋转。 每一个盘片为双面,每一个面...
MYSQL SOURCE报错 ERROR: ASCII
由 ASCII '\0' 引起的MYSQL SOURCE错误今天在群里面有一个朋友给出一个错误:source test.sqlERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expec...
MYSQL INNODB 组合索引分支节点数据解析
1、本文证明组合索引的所有键值在分支节点(非叶子结点也进行了存储)。2、本文给出B+树结构如何进行验证其B+树结构关于B树结构(不是B+树)可以参考:http://blog.itpub.net/7728585/viewspace-2126929/脚本:mysql> create table testzh(id int primary key auto_increment ,id2 int,id3 int,name varchar(20), ...
MYSQL merge union merge sort_union 的不同
今天看到MYSQL手册的Index Merge Optimization,不禁有一些想法,所以记录如下文先来解释下2种方式不同:这两种方式都使用一个table中的不同二级索引进行,注意是单个表。merge union :在使用or的时候如果二级索引包含了所有的key part,那么就可以得到排序好的聚集索引的键值或者ROWID,那么简单的union 去重就可以了...
ORACLE 索引和MYSQL INNODB 辅助索引对NULL的处理区别
ORACLE 索引和MYSQL INNODB 辅助索引对NULL的处理我们清楚ORACLE中的b+索引是对键值的NULL进行存储的,以致于我们 IS NULL这种肯定是用不到索引的,而且在某些情况下,比如select count(b) from tab ;这种如果b列没有显示的申明为not null属性也是用不到的,必须加上not null或者在where条件中加上b is not null。很...
MYSQL INNODB中表数据的返回顺序问题
接上一篇:http://blog.itpub.net/7728585/viewspace-2126344/如何证明INNODB辅助索引叶子结点KEY值相同的按照PRIMARY KEY排序 我们在上一篇中建立了表mysql> create table test (a int,b int,primary key(a),key(b));Query OK, 0 rows affected (0.08 sec)并且插入了数据mysql> insert into test values(1,1...
如何证明INNODB辅助索引叶子结点KEY值相同的按照PRIMARY KEY排序
接http://blog.itpub.net/7728585/viewspace-2126305/ RR模式下NEXT-KEY LOCK范围到底有多大 证明观点:1、对辅助索引的页中链表进行分析,如果在辅助索引页内的链表按照首先是KEY排序然后KEY相同的按照PRIMARY KEY排序那么基本就验证了我们的说法 这个随后可以补上这篇文章用到了自制工具./bc...
RR模式下NEXT-KEY LOCK范围到底有多大
我们知道MYSQL NEXT-KEY LOCK是用来防止幻读,在RR模式下就有了用武之地实际就是当前行锁+前后的一个区间,但是这个区间到底有多大?是简单的一个辅助索引列上的闭区间吗?测试全部是在RR模式下RC模式不存在建立测试表:CREATE TABLE `test` ( `a` int(11) NOT NULL DEFAULT '0', `b` int(11) DEFAULT ...
关于 MYSQL auto_increment_offset和auto_increment_increment
实际上两个值是这样的:我们理解auto_increment_offset为0开始的偏移量auto_increment_increment是一个步长auto_increment_offset+(N-1)*auto_increment_incrementN代表的是插入的次数。这算出来实际上是在0-+∽ 之间可以设置的值。打个比方mysql> set auto_increment_offset=2;Query OK, 0 rows affected (0.00 sec...
percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码)
percona 5.7.13 5.7.14 MYSQLDUMP备份完成后不能呢导回去,文件一大了非常麻烦,最近遇到这样的问题。[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -p
MYSQL 导入出错从指定行号截取文件(C语言写的)及注意事项
今天同事导入MYSQL的时候遇到错误 导出文件大约200G,在大约18w行出错。文件太大用SED读取指定行的时候命令报错,而且查看特别不方便,但是MYSQL报错的时候出现了一个行号,然后大概推算了一下得出了开始的行号,所以使用C写了一个小程序,记录下来i==18031 是你确定的行号-1 开始。点击(此处)折叠或打开...
自己写的一个MYSQL监控show global status工具用于查看指定时间内变化的指标
工具用于查看指定时间内show global status指标的变化,能够帮助运维人员了解系统负载的走势本工具在5.5 5.6 5.7中测试通过源码我放在百度云盘了http://pan.baidu.com/s/1mhIeKp6源码一共5个文件conmysql.c main.c findv.c other.c type.h如果源码编译使用如下方法1、建立一个MYSQL用户用于监控,不需要什么权限只...
外连接转换为内连接的情况
一般的情况下外连接如下a right join b on a.id=b.id 那么b一定要作为驱动表,原因在于只有b作为驱动表才能得到完整的结果集,如果a作为驱动,那么返回的结果集可能不完整,但是在特殊的情况的,可能将外连接转换为内连接考虑如下的情况b id name 1 g1 1 g2 ...
oracle index unique scan/index range scan和mysql range/const/ref/eq_ref的区别
关于oracle index unique scan/index range scan和mysql range/const/ref/eq_ref type的区别 关于ORACLE index unique scan和index range scan区别在于是否索引是唯一的,如果=操作谓词有唯一索引则使用unique scan否则则使用range scan但是这种定律视乎在MYSQL中不在成立如下执行kkkm2 id为主键mysq...
MYSQL 5.6锁定用户
5.7加入了LOCK ACCOUNT功能和ORACLE一样了,但是5.6貌似没有,但是可以代替用如下方法设置密码过期。The mysql.usertable now has a password_expiredcolumn. Its default value is 'N', butcan be set to 'Y'with the new ALTER USER statement. After an account's password has beenexpired, all operations perform...
linux下如何增量增量传输mysql binlog日志
在实际的工作中我们遇到了一个问题,我们备份使用的mysqldump,然后每天传输的备份到备份机器,但是binlog却不好传输主要要考虑几个问题:1、binlog 没法取时间,按照什么规则来传?2、binlog的传输并不是每次都全部传输过去,而是需要增量的。3、binlog的最后一个日志是在使用的是不能传输的。4、为了更通用需要使用一...
InnoDB: Error: space id and page n:o stored in the page?
2016-06-08 04:38:11 7fa7ddd86700 InnoDB: Error: space id and page n:o stored in the pageInnoDB: read in are 4294967295:4294967295, should be 22291:4096!InnoDB: Database page corruption on disk or a failedInnoDB: file read of page 4096.InnoDB: You may have to recover from a backup.2016-06-...
关于ORACLE和MYSQL中文字符乱码的根源剖析
关于数据库的字符集问题一直都是一个比较恶心的问题,如果不了解其实质可能一直都搞不清楚这个问题的根源,只能出了问题去度娘,这里我打算兼容ORACLE和MYSQL对字符集的处理来描述乱码出现的情形和如何防止乱码问题出现的可能,本文只用UTF-8和GBK为例子进行描述,请大家先记住'去'这个字的UTF8和GBK编码,因为整个文章...
关于MYSQL中FLOAT和DOUBLE类型的存储
关于MYSQL中FLOAT和DOUBLE类型的存储其实在单精度和双精度浮点类型存储中其存储方式和C/C++一致准守IEEE标准他们都是浮点型的,所谓的浮点型,是小数点的位置可变,其能够表示的范围比定点小数要广得多,而存储空间节省,但是受到精度的影响,所以在严格的数据中尽量使用定点小数mysql decimal(m,d)类型,ORACLE压...