MYSQL 在建立之初,表的格式就有好几种,与其他的数据库不同,你从未听说 ORACLE ,SQL SERVER , PG 对于表的存储格式有不同,而MYSQL 在建表的时候有一个地方对于存储的表的格式有不一样的设定...今天要谈这个问题,主要思路来自于,公司存储在MYSQL上的数据一直都有需要归档的需求,而数据归档临时的数据也是要存储在MYSQL上的,那么降低数据存储的空间,对于数据存储的空间的消耗是有利的。...那么实际上我们还可以针对字符型的字段进行一个测试,看看那种的方式对比存储INT 有什么不同。...综上所述:MYSQL 不同的ROW_FORMAT 格式对于数据占用的空间除了 compressed 格式以外,在空间的相差并不大。...压缩格式下,CPU 和磁盘系统的 最后说说为什么要做这件事,主要的原因 1 在不重要的项目当中,尤其项目的数据写入和读取并不频繁,但数据量积累的较大的情况下,可以采用compressed
BIGINT 8字节 大整数 FLOAT 4字节 单精度浮点数 DOUBLE 8字节 双精度浮点数 DECIMAL ——– DECIMAL(10, 2) 1^ : (-2^7 --- +2^7-1) 不精确的浮点数...十进制的浮点数无法在计算机中用二进制精确表达 CREATE TABLE temp( id INT UNSIGNED PRIMARY KEY, num FLOAT(20,10) ) 0.2 ---
in OR exists in 是把外表和内表做 hash 连接,而 exists 是对外表作 loop 循环,每次 loop 循环再对内表进行查询,一直以来认为 exists 比 in 的效率高的说法是不准确的...如果两个表大小相当,则 in 和 exists 的效率是差不多的,如果两个表的一大一小,则子查询表大的用 exists,子查询表小的用 in。...但是如果两个表差不多大,或者子查询的表较小的时候,就可以选择 in 做查询了。...not in OR not exists not in 和 not exists 两个的选择就比较简单了,就是仅使用 not exists 即可。...这主要是因为 null 是无法进行“操作”的,也就是 null 的几个原则: 如果 null 参与算术运算,则该算术表达式的值为 null 。
---- Pre MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,我们这里主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。..., MYI 和 MYD 分开存储 ,同样的 InnoDB都存在.idb文件中,所以InnoDB存储引擎的索引就是聚簇索引。...这个ibd就是 数据和索引,这两个存储在一个文件中 第一个重大区别是InnoDB的数据文件本身就是索引文件 ,因为就只有一个ibd文件啊。...这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。 InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM 不同。 ---- 索引原理图 ?...---- 第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域 ?
不同场景下 MySQL 的迁移方案 一 目录 一 目录 二 为什么要迁移 三 MySQL 迁移方案概览 四 MySQL 迁移实战 4.1 场景一 一主一从结构迁移从库 4.2 场景二 一主一从结构迁移指定库...直接拷贝数据目录方法,不同机器传输可以使用 rsync,耗时跟网络相关。使用 xtrabackup,耗时主要在备份和网络传输。如果有全备或者指定库的备份文件,这是获取备份的最好方法。...四 MySQL 迁移实战 ---- 我们搞明白为什么要做迁移,以及迁移怎么做以后,接下来看看生产环境是怎样操作的。不同的应用场景,有不同的解决方案。...阅读具体的实战之前,假设和读者有如下约定: 为了保护隐私,本文中的服务器 IP 等信息经过处理; 如果服务器在同一机房,用服务器 IP 的 D 段代替服务器,具体的 IP 请参考架构图; 如果服务器在不同机房...归纳起来,也就以下几点: 第一,迁移的目的是让业务平稳持续地运行; 第二,迁移的核心是怎么延续主从同步,我们需要在不同服务器和不同业务之间找到方案; 第三,业务切换需要考虑不同 MySQL 服务器之间的权限问题
不同字符集的数据库不代表其所有字段的字符集都是库所使用的字符集,每个字段可以拥有自己独立字符集!库的字符集是约束字段的字符集!...不同字符集的数据库不代表其所有字段的字符集都是库所使用的字符集,每个字段可以拥有自己独立字符集!库的字符集是约束字段的字符集!...不同字符集的数据库不代表其所有字段的字符集都是库所使用的字符集,每个字段可以拥有自己独立字符集!库的字符集是约束字段的字符集!...1 utf8mb4 utf16 3 2 a a 1 1 utf8mb4 utf16 1 2 1 1 1 1 utf8mb4 utf16 1 2 2 2 utf8mb4 utf16 8 8 结论 MySQL...英文、阿拉伯数字占用1个字节 MySQL在UTF16下1个中文字符占用2个字节,英文、阿拉伯数字也是占用2个字节 特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!
TABLE table_name ADD FULLTEXT (column);https://www.alwdzr.com 创建全文索引 索引并非是越多越好,创建索引也需要耗费资源,一是增加了数据库的存储空间...,二是在插入和删除时要花费较多的时间维护索引 二级索引:叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录 排除缓存⼲扰 如果我们当前的MySQL...版本⽀持缓存⽽且我们⼜开启了缓存,那每次请求的查询语句和结果都会以keyvalue的形式缓存在内存中的,⼀个请求会先去看缓存是否存在,不存在才会⾛解析器。...过www.alwdzr.com TABLE table_name ADD INDEX index_name(column1, 缓存失效⽐较频繁的原因就是,只要我们⼀对表进⾏更新,那这个表所有的缓存都会被清空...,其实我们很少存在不更新的表,可能静态表可以⽤到缓存,如果⾛⼤数据离线分析,缓存也就没⽤了。
mysql 与 oracle 的查询语法有一部分不太相同,特别是在多表查询时,mysql 无法适应 oracle 的做外连接和右外连接的查询语法,自己有另外一套查询语法,与 ms sql server...所以这里列举一下,方便以后查询和使用。...now()) day(now()) 内连接 select d.deptno, count(e.empno) from dept d left outer join emp e /* 取 join 左侧表的数据...group by d.deptno; select d.deptno, count(e.empno) from emp e right outer join dept d /* 取 join 右侧表的数据
前期回顾 MySQL Galera Clusters全解析 Part 1 Galera Cluster 简介 MySQL Galera Clusters全解析 Part 2 基于认证的复制 MySQL...Galera集群 这节内容主要讲其和单机的MySQL有何不同点,包含一些需求和限制 1....服务器不同 Galera需要和传统的单机不一样,其需要集成一些补丁,并且在二进制日志和字符集的处理上也不一样 2....表配置的不同 一些传统数据库的表配置可能Galera不同,如存储引擎支持,查询缓存等 6....9.查询日志 Galera无法将查询日志定向到表中,如有需求,你必须将其定向到文件中 log_output = FILE 10.事务的不同 Galera不支持分布式事务XA 事务的大小上也有限制,
explain语句执行的结果中,Extra项中含有Using filesort表示需要排序,MySQL会给每个线程分配一块内存用于排序,称为sort_buffer。...当排序的字段较多时,内存可放下的行数很少,需要分成很多个临时文件,排序性能很差,即MySQL认为排序的单行长度太大会使用rowid排序。...控制用于排序的行数据的长度,单行长度超过该值,MySQL更换排序算法 SET max_length_for_sort_data = 16; 使用索引排序 语句执行流程: 从索引找到第一个满足where...条件的主键id 到主键id索引取出整行,找出需要返回的字段,作为结果集直接返回 从索引取下一个记录主键的id 重复步骤2、3,直到不满足where条件时循环结束。...使用覆盖索引时,explain语句的Extra字段会多了个"Using index",表示使用索引覆盖。 MySQL的一个设计思想:如果内存够,就要多利用内存,尽量减少磁盘访问。
某些项目的数据库存在跨机房的情况,可能会在不同机房中增加节点,或者把机器从一个机房迁移到另一个机房。再比如,不同业务共用同一台服务器,为了缓解服务器压力以及方便维护,也会做迁移。...直接拷贝数据目录方法,不同机器传输可以使用 rsync,耗时跟网络相关。使用 xtrabackup,耗时主要在备份和网络传输。如果有全备或者指定库的备份文件,这是获取备份的最好方法。...三 MySQL 迁移实战 我们搞明白为什么要做迁移,以及迁移怎么做以后,接下来看看生产环境是怎样操作的。不同的应用场景,有不同的解决方案。...阅读具体的实战之前,假设和读者有如下约定: 为了保护隐私,本文中的服务器 IP 等信息经过处理; 如果服务器在同一机房,用服务器 IP 的 D 段代替服务器,具体的 IP 请参考架构图; 如果服务器在不同机房...归纳起来,也就以下几点: 第一,迁移的目的是让业务平稳持续地运行; 第二,迁移的核心是怎么延续主从同步,我们需要在不同服务器和不同业务之间找到方案; 第三,业务切换需要考虑不同 MySQL 服务器之间的权限问题
在看模拟器的时候,出现了关于Simulator和Emulator两种词汇;都可以翻译为模拟器;但在调研游戏模拟器的时候,多为Emulator; 两者词汇的含义和应用场景有什么异同呢?...相同: Simulator和Emulator两者都可以在灵活的软件定义的环境中执行软件测试。而且这种方式比在真机中测试更快速更简单。真机测试往往在软件发布以用于生产力之前。...不同: Simulator用于创建包含了应用程序真实生产环境中的变量和配置的模拟环境。...从某种程度来说,你可以认为Emulator是Simualtor和真机之间的一层。Simulator只是模拟了可以用软件定义或配置的功能环境,而Emulator模拟了软硬件功能。...Simulator Emulator 一定程度上模拟其它系统 精确模仿其它系统 不一定遵循所有的被模拟系统的规则 严格遵循被模拟系统的参数和规则 应用程序和事件的模型 就是其它系统的拷贝 参考链接:
mysql中B+Tree索引和Hash索引的不同 不同点 1、hash索引适合等值查询、没办法利用索引完成排序、不支持多列联合索引的最左匹配规则等。...如果有大量重复健值得情况下,hash索引的效率会很低,因为哈希碰撞问题。 哈希索引也不支持多列联合索引的最左匹配规则; 2、B+树索引的关键字检索效率比较平均。...不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题。 在大多数场景下,都会有范围查询、排序、分组等查询特征,用B+树索引就可以了。...实例 比如如下的语句: unique key unique_username using btree(`user_name`) 这里的using btree只是显示的指定的使用的索引的方式为b+树,对于...以上就是mysql中B+Tree索引和Hash索引的不同,希望对大家有所帮助。更多mysql学习指路:MySQL 推荐操作系统:windows7系统、mysql5.8、DELL G3电脑
在MySQL中,主键的指定是在MySQL插入数据时指明PRIMARY KEY来定义的。当没有指定主键的时候,另一种工具 —— 索引,相当于替代了主键的功能。...: 总结: 1、整体上的插入速度还是和上一回的统计数据类似:MongoDB不指定_id插入 > MySQL不指定主键插入 > MySQL指定主键插入 > MongoDB指定_id插入。...2、从图中可以看出,在指定主键插入数据的时候,MySQL与MongoDB在不同数据数量级时,每秒插入的数据每隔一段时间就会有一个波动,在图表中显示成为规律的毛刺现象。...5、在查询的数据量逐渐增多的时候,MySQL的查询速度是稳步下降的,而MongoDB的查询速度却有些起伏。 分析: 1、如果MySQL没有经过查询优化的话,其查询速度就不要跟MongoDB比了。...这样看来,MongoDB的查询速度波动也处在一个合理的范围内。 3、MySQL的稳定性还是毋庸置疑的。 结论 1、相比较MySQL,MongoDB数据库更适合那些读作业较重的任务模型。
这里Materialize with deduplication 的意思是,当第一次MYSQL需要这个子查询的结果的情况下,会将临时结果产生为一个临时表,当再次需要这个结果的时候会再次调用。...上面查询中使用了IN 和 EXISTS ,如果我们通过 not in 和 not exists 来看看执行计划是否有变化。...,第三个用 LEFT JOIN 表达的SQL 的结果和前两个不一样。...这里结果的不同主要有几个问题 1 IN EXIST 在数据结果查询中,是有去重的功能的。...,要明白 IN EXIST 和 LEFT JOIN 之间的区别,避免结果不是自己要的。
`==`运算符是在进行必要的类型转换后,再比较。`===`运算符不会进行类型转换,所以如果两个值不是相同的类型,会直接返回`false`。...1 == [1]; // true 1 == true; // true 0 == ""; // true 0 == "0"; // true 0 == false; // true 如果你对`==`和`...===`的概念不是特别了解,建议大多数情况下使用`===`
ZIP和RAR是最流行的文件格式,用来压缩数据。他们无疑是压缩文件的王者。 虽然二者都使用超快压缩算法来压缩和解压缩的内容,但从速度和效率上来说,RAR的效率要高于ZIP。...这两种方法都是压缩算法,可以有效地压缩文件,从而在不影响文件内容的情况下缩小文件大小。这篇文章介绍了ZIP和RAR文件的不同。...压缩文件格式rar和zip的不同 1、zip的起源比rar要早很多,并且它的普及率比后者更广。操作系统对zip直接支持解压提取文件,其应用范围比rar要好得多。...为什么他们的压缩速度会有很大的不同其实也是因为算法的不同。rar比zip要强大得多。例如rar独特的solid压缩方式,或者可以锁定压缩文件以防止被修改,又比如恢复记录功能,能够恢复物理损坏的数据等。...4、rar与zip的不同之处:RAR通常比ZIP压缩比高,但是压缩/解压缩很慢,所以如果在网络上传播和分发文件,zip格式常常是最常用的选择。
StringBuffer 和 StringBuilder 的存在是为了解决 String 对象的 immutable (不可变对象)的问题。...因此 StringBuffer 和 StringBuilder 都是可变对象,但是它们之间还是有一点点不同的,主要是在线程安全上面。 No....StringBuilder 是不同步的。因此这 2 个线程是可以同时调用 StringBuilder。 2) StringBuffer 比 StringBuilder 效率要低。...StringBuilder 的效率比 StringBuffer 更高 因为涉及到线程同步的问题,所以 StringBuffer 和 StringBuilder 的效率是有所差异的。...在进行字符串拼接或者对字符串涉及到一些操作的时候,可以尽量先使用 StringBuffer 和 StringBuilder 来构建字符串,然后再转换为 String 以提高效率。
是不是感觉有点眼熟,这不就是 MySQL 的索引方式的,直接用 B+树建立索引词典指向被索引的数据。 term index:但是问题又来了,你觉得 Term Dictionary 应该放在哪里?...对高位进行聚合 (以高位做 key,value 为有相同高位的所有低位数组),根据低位的数据量 (不同高位聚合出的低位数组长度不相同),使用不同的 container(数据结构) 存储。...为了能够在数量巨大的 terms 中快速定位到某一个 term,同时节约对内存的使用和减少磁盘 io 的读取。...最后说一下,技术选型永远伴随着业务场景的考量,每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。...但往高处思考,再类比一下 MySQL,你就会发现,虽然都是索引,但是实现起来,截然不同。笼统的来说,B-tree 索引是为写入优化的索引结构。
由于不同的ClassLoader会从不同的地方加载类,有时是错误的CLASSPATH引发这类错误,有时是某个库的jar包缺失引发这类错误。...NoClassDefFoundError和ClassNotFoundException之间存在一些细微的不同点。...除了这些基本的不同,我们可以看看别的不同,以加深对NoClassDefFoundError和ClassNotFoundException的理解。...如果你在J2EE开发中遇到NoClassDefFoundError,那么最有可能的原因就是存在多个类加载器和多个目标类,即我们常说的Jar包冲突——关于Jar包冲突,一般可以使用下面两种方法解决: 使用...JVM类加载阶段 最后,这里有一页非常好的PPT,总结了这两种异常的不同点: ?
领取专属 10元无门槛券
手把手带您无忧上云