MySQL
MySQL
flightfish
这个作者很懒,什么都没留下…
展开
-
explain
原创 2020-06-30 18:31:41 · 459 阅读 · 0 评论 -
MYSQL基于成本的优化
什么是成本I/O成本我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。CPU成本读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。对于InnoDB存储引擎来说,页是磁盘和内存之间交互的基本单位,设计MySQL的大叔规定读取一个页面花费的成本默认是1.0,读取以及检测一条记录是否符合搜索条原创 2020-06-23 19:59:53 · 995 阅读 · 0 评论 -
两个表连接的原理
连接简介连接的本质//这两个表都有两个列,一个是INT类型的,一个是CHAR(1)类型的,填充好数据的两个表长这样:mysql> SELECT * FROM t1;+------+------+| m1 | n1 |+------+------+| 1 | a || 2 | b || 3 | c |+------+------+3 rows in set (0.00 sec)mysql> SELECT * FROM t2;+原创 2020-06-23 17:05:45 · 2463 阅读 · 0 评论 -
单表访问方法
//eg single_table表建立了1个聚簇索引和4个二级索引CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100), key_part1 VARCHAR(100), key_part2 VARCHAR(100), key_part3 VARCHAR(100), common_fi原创 2020-06-23 15:22:22 · 603 阅读 · 0 评论 -
InnoDB的表空间
页面通用部分数据页,也就是INDEX类型的页由7个部分组成File Header:记录页面的一些通用信息File Trailer:校验页是否完整,保证从内存到磁盘刷新时内容的一致性。独立表空间结构区(extent)的概念设计InnoDB的大叔们提出了区(英文名:extent)的概念。对于16KB的页来说,连续的64个页就是一个区,也就是说一个区默认占用1MB空间大小。不论是系统表空间还是独立表空间,都可以看成是由若干个区组成的,每256个区被划分成一组。画个图表示就是这样:从上图原创 2020-06-17 20:56:29 · 628 阅读 · 0 评论 -
MySQL 的数据目录
数据库在文件系统中的表示每个数据库都对应数据目录下的一个子目录,或者说对应一个文件夹表在文件系统中的表示这个后缀名为.frm是以二进制格式存储的,我们直接打开会是乱码的~ InnoDB是如何存储表数据的InnoDB设计了一个表空间或者文件空间(英文名:table space或者file space)的概念,这个表空间是一个抽象的概念,它可以对应文件系统上一个或多个真实文件(不同表空间对应的文件数量可能不同)。系统表空间(system tablespace)认情况下,InnoDB会在数据目录下创原创 2020-06-17 17:38:31 · 613 阅读 · 0 评论 -
B+树索引
B+树索引InnoDB数据页的7个组成部分,知道了各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录没有索引的查找由于我们并不能快速的定位到记录所在的页,所以只能从第一个页沿着双向链表一直往下找,在每一个页中根据我们刚刚唠叨过的查找方式去查找指定的记录。索引为了故事的顺原创 2020-06-16 22:35:46 · 2121 阅读 · 0 评论 -
InnoDB
InnoDB是一个将表中的数据存储到磁盘上的存储引擎将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB在Compact行格式中,把所有变长字段的真实数据占用的字节长度都存放在记录的开头部位,从而形成一个变长字段长度列表,各变长字段数据占用的字节数按照列的顺序逆序存放,我们再次强调一遍,是逆序存放!变长字段长度列表假设某个字符集中表示一个字符最多需要使用的字节数为W,也就是使用SHOW CHARSET语句的结果中的Maxlen列,比方说utf8原创 2020-06-13 19:24:01 · 2837 阅读 · 0 评论 -
字符集和比较规则
一些重要的字符集ASCII字符集共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码,我们看一些字符的编码方式:'L' -> 01001100(十六进制:0x4C,十进制:76)'M' -> 01001101(十六进制:0x4D,十进制:77)ISO 8859-1字符集(latin1)共收录256个字符,是在ASCII字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来原创 2020-06-13 18:16:30 · 759 阅读 · 0 评论 -
mysql配置和系统变量
/usr/local/mysql/bin关于配置文件路径which mysqld/usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 从上图可以看出原创 2020-06-13 17:43:56 · 603 阅读 · 0 评论 -
mysql笔记1
查询缓存MySQL服务器并没有人聪明,如果两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。另外,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修...原创 2020-03-11 09:53:28 · 476 阅读 · 0 评论 -
mysql
Mysql 中 MyISAM 和 InnoDB 的区别有哪些InnoDB 支持事务、外键、行级锁MyISAM 表锁InnoDB 是聚集索引,MyISAM 是非聚集索引MyISAM:支持 FULLTEXT类型的全文索引InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。MyISAM:如果执行大量的SELECT,MyISA...原创 2020-02-18 23:39:03 · 483 阅读 · 0 评论