MySQL实战
文章平均质量分 88
我爱娃哈哈
这个作者很懒,什么都没留下…
展开
-
为什么SQL执行计划未使用创建的索引呢?MySQL是如何选择索引的?
MySQL 会根据成本计算得到最优的执行计划, 根据不同条件选择最优执行计划,而不是同一类型一成不变的执行过程,这才是优秀的优化器该有的样子。在关系型数据库中,B+ 树索引只是存储的一种数据结构,具体怎么使用,还要依赖数据库的优化器,优化器决定了具体某一索引的选择,也就是常说的执行计划。这些操作都在 Server 层完成。但是对于性别这样的字段,其值只有男和女两种,哪怕记录数再多,也只有两种值,这是低选择性的字段,因此无须在性别字段上创建索引。原创 2024-05-27 18:20:07 · 640 阅读 · 0 评论 -
【MySQL实战】SQL优化的利器:组合索引的正确使用姿势
本文介绍了组合索引的概念、设计实战及三大优势。通过案例展示了如何避免额外排序和回表,提升SQL查询性能。组合索引可覆盖多个查询条件,实现索引覆盖技术,提升查询效率。文章将持续更新,欢迎关注。原创 2024-05-26 18:23:01 · 254 阅读 · 0 评论 -
InnoDB存储引擎中的索引组织表和二级索引如何影响数据库的性能和查询效率?
这时索引 idx_last_modify_date 的插入和 idx_register_date 类似,是比较顺序的,但不同的是,索引 idx_last_modify_date 会存在比较频繁的更新操作,比如用户消费导致余额修改、money 字段更新,这会导致二级索引的更新。索引是排序后的数据,而堆表中的数据是无序的,索引的叶子节点存放了数据在堆表中的地址,当堆表的数据发生改变,且位置发生了变更,所有索引中的地址都要更新,这非常影响性能,特别是对于 OLTP 业务。, 性能开销相对较大;原创 2024-05-22 19:28:49 · 419 阅读 · 0 评论 -
如何正确设计索引以发挥MySQL性能优势?
随着插入 B+ 树索引的记录变多,1个页(16K)无法存放这么多数据,所以会发生 B+ 树的分裂,B+ 树的高度变为 2,当 B+ 树的高度大于等于 2 时,根节点和中间节点存放的是索引键对,由(索引键、指针)组成。: B+ 树索引的维护代价非常小,叶子节点都是从左往右进行插入,比较典型的是自增 ID 的插入、时间的插入(若在自增 ID 上创建索引,时间列上创建索引,则 B+ 树插入通常是比较快的)。所以,上述的数据结构一般仅用于内存对象,基于磁盘的数据排序与存储,最有效的依然是 B+ 树索引。原创 2024-05-17 19:48:08 · 597 阅读 · 0 评论 -
MySQL 8.0版本对SQL标准的支持超越了Oracle,到底有多强大?
MySQL支持多种访问方式,包括SQL和NoSQL。通过Memcached协议和XProtocol,可将MySQL打造成KV数据库或文档数据库,提升性能并满足复杂查询需求。MySQL在JSON支持、数据持久化、事务处理等方面优于原生Memcached,同时与MongoDB相比也具优势。原创 2024-05-16 19:15:38 · 332 阅读 · 0 评论 -
提升MySQL性能的秘密:了解表压缩功能的使用及其对性能的影响。
另一方面,所有页的读写操作都和非压缩页一样,没有开销,只有当这个页需要刷新到磁盘时,才会触发页压缩功能一次。数据库中的表是由一行行记录(rows)所组成,每行记录被存储在一个页中,在 MySQL 中,一个页的大小默认为 16K,一个个页又组成了每张表的表空间。这是因为不同于 COMPRESS 页压缩,TPC 压缩在内存中只有一个 16K 的解压缩后的页,对于缓冲池没有额外的存储开销。COMPRESS 页压缩就是将一个页压缩到指定大小,比如从16K压缩到8K,但是如果无法压缩到8K,则会产生两个8K的页。原创 2024-05-16 09:33:24 · 257 阅读 · 0 评论 -
MySQL表结构的一些设计经验分享
相信在大学学习《数据库系统概论》时,肯定学习过关系数据库的设计规范,比如第一范式、第二范式、第三范式,BC 范式等,它们是《数据库系统概论》考试中重要的考点。所以,在进行表结构设计时,数据只需存放在一个地方,其他表要使用,通过主键关联存储即可。淘宝订单号的最后 6 位是用户 ID 相关信息,前 14 位是时间相关字段,这样能保证插入的自增性,又能同时保留业务的相关信息作为后期的分布式查询。范式设计是非常重要的理论,是通过数学集合概念来推导范式的过程,在理论上,要求表结构设计必须至少满足三范式的要求。原创 2024-05-13 21:13:57 · 537 阅读 · 0 评论 -
MySQL中,关于日期类型的那些事儿,你知道哪些?
但是如果使用默认的操作系统时区,则每次通过时区计算时间时,要调用操作系统底层系统函数 __tz_convert(),而这个函数需要额外的加锁操作,以确保这时操作系统时区没有修改。除了 DATETIME,日期类型中还有一种 TIMESTAMP 的时间戳类型,其实际存储的内容为‘1970-01-01 00:00:00’到现在的毫秒数。在上面的表 User 中,列 register_date 表示注册时间,DEFAULT CURRENT_TIMESTAMP 表示记录插入时,若没有指定时间,默认就是当前时间。原创 2024-05-12 21:26:11 · 390 阅读 · 0 评论 -
MySQL中,字符串类型不能忽视的问题
这里有个情况要注意:在我们字符串存储的长度超过65536情况下,可以使用TEXT和BLOB来存储,这两个类型的最大存储长度为4G,TEXT和BOLB两者的区别在于BLOB没有字符集属性,属于二进制存储。在表结构的设计中,除了设计字段的数据类型外,我们还需要定义字符的字符集,不同的字符在不同的字符集编码下,对应着不同的二进制值。所以,在设计密码存储使用,还需要加盐(salt),每个公司的盐值都是不同的,因此计算出的值也是不同的。:表示动态盐,每次用户注册时业务产生不同的盐值,并存储在数据库中。原创 2024-05-11 19:43:01 · 461 阅读 · 0 评论 -
MySQL数据库中的浮点类型和高精度类型有什么区别?为什么不推荐使用浮点类型?
在软件开发中,作为后端,无可避免的需要熟练使用 MySQL 数据库进行数据存储和读取。对于信息系统而言,数据库的的地位不言而喻。那作为软件开发工程师,在使用 MySQL 过程中,又有哪些需要注意的呢?我们从实际开发来一点点的介绍。本篇文章,我们先来了解一下关于数据库数字类型的一些内容。我们在做表设计的时候,数字类型是常见的数据类型,用于存储数字相关的信息(整数型、浮点型、高精度型)。但是在不同的业务场景中,错误的使用数字类型,也会给系统带来很大的风险。原创 2024-05-10 22:27:53 · 936 阅读 · 0 评论