(3)问题分析
通常情况下,使用哪个 ORM 框架,都是由公司规范规定,一般人没办法左右 。但,无论使用哪个框架,面对的问题基本是一致的 。这种开发模型,存在以下几个问题:
- 过于繁琐 , 开发效率低:一个简单的查询请求,包括参数验证、ORM API调用、数据转换等工作,涉及多个层次多个类的协调一致 , 常见问题包括:
- 重复性劳动:没有什么技术含量,首先是使用 “字段” 或 “属性” 调用各种 API , 然后是各种类型间的转化,枯燥无味 。
- 容易出错:涉及参数和字段较多 , 容易设置错位,比如参数设置错误、对象转换时字段设置错误等 。
- 性能瓶颈:实际开发中,性能瓶颈并没有在 ORM 框架本身,主要是对 MySQL 使用不当,特别是没有发挥索引的优势,常见问题包括:
- 没有合适索引:设计之初并未考虑索引,或者对索引缺乏有效的管理 。
- 参数丢失导致无法使用索引:参数丢失导致最左匹配原则被破坏 , 无法高效的使用索引 。
- 返回结果过多导致性能低下:一次性返回大量数据,增加 DB 和 应用程序的负载,最终导致性能低下 。
- 索引优化:分析表数据和查询需求,创建合适的索引来提高查询效率 。
- SQL语句优化:优化SQL语句的写法,避免使用子查询、联合查询、多层嵌套等耗费资源的操作 。
- 数据库结构优化:合理设计数据库结构,避免冗余数据以及过多分表分库导致性能低下 。
- 控制结果集大?。翰檠?慕峁??酱螅?查询时间就越长 。尽量限制结果集大小 , 避免不必要的计算 。
- 数据库连接池优化:通过优化数据库连接池的配置,避免连接池满载以及连接超时等问题,提高数据库处理效率 。
- 数据库批量操作优化:通过批量操作来减少单次与数据库的交互次数 , 提高执行效率 。
- 提升基于 WHERE 条件的查询性能:在 WHERE 条件中使用了索引,可以更快地定位到匹配行 , 避免全表扫描 。
- 提升基于范围查询的查询性能:如果仅需要一个范围,而不是整个表的数据,索引可以提高查询效率 。
- 提升排序和分组查询性能:索引可以让 MySQL 更快地执行排序和聚合,快速定位数据,而不是遍历整个表 。
B+Tree 在 MySQL 中极为重要 , 它既是一种数据的组织结构,比如聚簇索引 。又是查询优化最重要的一种手段,比如非聚簇索引 。B+TreeB+Tree 在 MySQL 中是如此重要,它是 MySQL 使用的默认索引 。B+Tree 索引不仅可以加速单个键值查询,还可以支持范围查找并为查询结果排序 。此外 , B+Tree 还可以支持高效的插入和删除操作,当在一个 B+Tree 索引中插入或删除记录时,B+Tree 索引通过特定规则进行拆分和合并来实现重新平衡 。
在 MySQL 中 , B+Tree 索引不仅适用于普通表,还适用于主键索引、唯一索引、辅助索引等 。因此 , 了解 B+Tree 索引的设计和原理对于开发高效、可扩展的 MySQL 应用程序至关重要 。
以下是一个 B+Tree 的示意图:
文章插图
B+Tree作为一种数据组织方式,有以下几个特点:
- 非叶子节点只存储关键字和页码 , 而不保存数据 。这也是B+Tree和B-Tree的主要区别,这种特性使得B+Tree可以更快的查找特定关键字 。
- 叶子节点包含所有数据和关键字,形成一个有序链表 。这种结构使得B+Tree在范围查询时更高效 。
- 支持高效范围查找,基于在叶子节点形成的有序链表,可以更快地查找满足查询条件的数据 。
推荐阅读
- DDD死党:内存Join——将复用和扩展用到极致
- DDD 必备架构--六边形架构
- 解密DDD:高内聚对象组的维护之道
- 什么是基友什么是死党 什么是基友
- 死党是什么关系 基友是什么关系
- 死党是和闺蜜的意思一样吗知乎 死党是和闺蜜的意思一样吗
- DDD实战 - Repository模式的妙用
- 为什么从 MVC 到 DDD,架构的本质是什么?
- DDD 中关于应用架构的那些事
- 基于DDD的微服务落地