MySQL
文章平均质量分 69
MySQL存储结构 索引
dream_alen
这个作者很懒,什么都没留下…
展开
-
MySQL驱动表
文章目录驱动表定义mysql关联查询的概念驱动表与被驱动表总结三级目录驱动表定义当进行多表连接查询时, [驱动表] 的定义为:1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]2)未指定联接条件时,行数少的表为[驱动表](重要)忠告:如果你搞不清楚该让谁做驱动表、谁 join 谁,请让 MySQL 运行时自行判断既然“未指定联接条件时,行数少的表为[驱动表]”了,而且你也对自己写出的复杂的 Nested Loop Join 不太有把握(如下面的实例所示),就别指定谁 left/rig原创 2021-08-02 16:28:46 · 3018 阅读 · 0 评论 -
MySQL事务(一)
一、事务的基本要素原子性(Atomicity) 一致性(Co) 隔离性() 持久性()原创 2021-06-11 11:23:58 · 86 阅读 · 0 评论 -
MySQL创建高性能索引(一)- 索引分析
一:索引使用场景 哪些情况需要创建索引原创 2021-06-10 16:42:20 · 83 阅读 · 0 评论 -
MySQL学习笔记(一)- explain
explain的执行结果mysql> explain select * from subject where id = 1 \G****************************************************** id: 1 select_type: SIMPLE table: subject partitions: NULL type: constpossible_keys: PRIMARY原创 2021-06-10 11:18:03 · 357 阅读 · 0 评论 -
MySQL学习笔记(二)- explain之extra
extra主要有几种情况:Using where、Using index、Using index condition、Using filesort、Using temporary、Us原创 2021-06-10 09:55:49 · 3629 阅读 · 0 评论 -
MySQL查询性能优化(七)- 优化特定类型的查询
1、优化count()查询count()聚合函数,以及如何优化使用了该函数的查询,很可能是mysql中最容易被误解的前10个话题之一count() 是一个特殊的函数,有两种非常不同的作用。它可以统计某个列值的数量,也可以统计行数。统计列值 要求列值是非空的。(不统计null,即null值计数为0)count()的另一个用处是统计结果集的行数。当mysql确认括号的表达式值不可能为空时,实际上就是统计行数。最简单的就是当我们使用count(*)的时候,这种情况下统配符*并不会像我们猜想的那样扩展原创 2021-06-09 10:03:55 · 152 阅读 · 0 评论 -
MySQL查询性能优化(五)- 查询优化器的局限性
1.1 优化count()查询1.2 优化关联查询1.3 优化子查询1.4 优化group by 和 distinct1.5 优化limit分页1.6 优化sql_calc_found_rows1.7 优化union查询原创 2021-04-27 11:02:04 · 342 阅读 · 0 评论 -
MySQL千万级数据分区存储及查询优化
MySQL千万级数据分区存储及查询优化作为传统的关系型数据库,MySQL因其体积小、速度快、总体拥有成本低受到中小企业的热捧,但是对于大数据量(百万级以上)的操作显得有些力不从心,这里我结合之前开发的一个web系统来介绍一下MySQL数据库在千万级数据量的情况下如何优化提升查询速度。一、基本业务需求该系统包括硬件系统和软件系统,由中科院计算所开发的无线传感器网络负责实时数据的监测和回传到MySQL数据库,我们开发的软件系统负责对数据进行实时计算,可视化展示及异常事件报警监测。宫殿的温湿度等数据都原创 2021-04-27 10:26:53 · 1028 阅读 · 0 评论 -
MySQL查询性能优化(三)-重构查询的方式
一:重构查询的方式一个复杂查询还是多个简单查询切分查询分解关联查询二:查询执行的基础希望mysql能够以更高的性能运行查询时,最好的办法弄清楚mysql是如何优化和执行查询的。很多查询优化工作实际上就是遵守一些原则优化器能够按照预想合理的方式运行msyql查询执行过程...原创 2021-04-25 11:27:00 · 172 阅读 · 0 评论 -
MySQL查询性能优化(二)-慢查询基础
查询性能低下最基本的原因是访问的数据过多,某些查询可能不可避免地需要筛选大量数据,大部分性能低下的查询都可以通过访问的数据量的方式进行优化对于低效的查询,下面两个改善步骤分析总是有效的1.1 是否向服务器请求了不需要的数据有些查询会请求超过实际需要的数据,后这些多余的数据会被应用程序丢弃,这会给MySQL服务器带来额外的负担,增加网络开销,也会消耗应用服务器的CPU和内存资源1.2 MySQL是否在扫描额外的记录在确定查询只返回需要的数据以后,接下来应该看看查询.原创 2021-04-23 11:13:39 · 77 阅读 · 0 评论 -
MySQL架构(三)- 磁盘存储数据页
1 数据页数据页是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的设计了不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等。下面这些类型的页,我们都不会说,只讲用于存放数据的页,也就是数据页(也叫索引页)。1.1 数据页结构从图中可以看出,一个InnoDB数据页的存储空间大致被划分7个部分,有的部分占用字节数是确定的,有的部分占用的字节数是不确定的1.2 数...原创 2021-04-13 10:12:40 · 690 阅读 · 0 评论 -
MySQL架构(四)- 磁盘存储行格式
MySQL服务器上负责对表中的数据的读取和写入工作的部分是存储引擎,而服务器又支持不同类型的存储引擎,真实数据在不同存储引擎存放的格式一般也是不同的1、InnoDB行格式每行数据在磁盘上的存放方式被称为行格式或者记录格式,InnoDB有4中不同的行格式,Compact、Redundant、Dynamic和Compressed行格式1.1 compact行格式上图分析出,一条完整的记录其实被分为额外信息和真实数据两部分1.1.1 额外信息 存储引擎为了描述这行...原创 2021-04-12 11:06:05 · 269 阅读 · 0 评论 -
MySQL架构(二)- InnoDB的存储结构
InnoDB页的简介InnoDB是一个将表中的数据存储到磁盘上的存储引擎,即使关机后重启我们的数据还是存在;而真正处理数据的过程是发生在内存中,所以需要把磁盘中的数据加载到内存中;如果处理写入 或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写差几个数量级,所以当我们想从表中获取几条记录,InnoDB存储 引擎需要一条一条的把记录从磁盘中读出来?不是,那样会慢死的,InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间的交互的基本单位,InnoDB原创 2021-04-09 23:38:58 · 757 阅读 · 0 评论 -
MySQL schema设计中应避免的陷阱
太多的列 MySQL 的存储引擎API 工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的。MyISAM 的定长行结构实际上与服务器层的行结构正好匹配,所以不需要转换。然而,MyISAM 的变长行结构和InnoDB 的行结构则总是需要转换。转换的代价依赖于列的数量。当我们研究一个CPU 占用非常高的案例时,发现客户使用了非常宽的表(数千个字段),然而只有一小部分列会实际用到,这时转换的代价就非常高原创 2021-04-01 09:24:32 · 79 阅读 · 0 评论 -
Schema与数据类型优化
4.1 选择优化的数据类型简单的原则:更小的通常更好简单就好尽量避免null在为列 选择数据类型时,第一步需要确定合适的大类型:数字、字符串、时间等,下一步,选择具体类型:很多MySQL的数据类型可以存储相同类型的数据,只是存储长度和范围不一样,允许的精度不同,或者需要的物理空间(磁盘或内存空间)不同;相同大类型的不同子类型数据有时也有一些特殊的行为和属性比如:TimeStamp 和DATETIME列都可以存储相同类型的数据:时间和日期,精确到秒,然而TimeStamp只使用原创 2021-03-29 10:44:07 · 74 阅读 · 0 评论 -
MySQL数据类型-选择标志符(identifier)
为标识列fdenier clum选择合适的数据类型非常重要。般来说更有可能用标识列与其他值进行比较(例如, 在关联操作中),成者通过标识列寻找其他列,标识列也可能在另外的表中作为外键使用,所以为标识列选择数据类型时,应该选择限关联表中的对应列样的类型 (正如我们在本在早些时候所论述的样, 在相关的表中使用相同的数据类型是个好主意,因为这些列很可能在关联中使用)。当选择标识列的类型时,不仅仅需要考虑存储类型,还需要考虑MySOL对这种类型怎么执行计算和比较。例如,MySQL在内部使用整数存储ENUM和SE原创 2021-04-01 08:43:57 · 696 阅读 · 0 评论 -
MySQL数据类型--字符串类型
字符串类型是在数据库中存储字符串的数据类型,字符串类型包括char,varchar,text,enum和set。char类型和varchar类型两种最主要的字符串类型,怎么存储在磁盘和内存中,跟存储引擎的具体实现有关char类型长度是固定,在创建表时就指定了,其长度可以是0-255的任意值 MySQL会剔除所有的末尾空格 char值会根据需要采用空格进行填充,以方便比较 char适合存储很短的字符串,或者所有值都接近于同一个长度(MD5,因为这是定长的值) 对于经常变更的数据,cha原创 2021-03-31 16:56:55 · 2317 阅读 · 0 评论 -
MySQL数据类型-整数类型
MySQL提供了多种数据类型,包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型、二进制数据类型;不同的数据类型有各自的的类型,使用范围也各不相同,而且存储方式也不相同整数类型参考:各种整数类型的取值范围、存储的字节数上图分析如下:1,int类型和integer类型的字节数和取值范围是一样的,其实在MySQL中int类型和integer类型是一样的。 2,tinyint类型占用的字节最小,只需要一个字节。取值范围也是最小的。 3,bigint类型占用的字节最大,需要原创 2021-03-30 23:19:31 · 3815 阅读 · 0 评论