答疑篇:代码篇思考题集锦(二)
朱晔
该思维导图由 AI 生成,仅供参考
你好,我是朱晔。
今天,我们继续一起分析这门课第 7~12 讲的课后思考题。这些题目涉及了数据库索引、判等问题、数值计算、集合类、空值处理和异常处理的 12 道问题。
接下来,我们就一一具体分析吧。
07 | 数据库索引:索引并不是万能药
问题 1:在介绍二级索引代价时,我们通过 EXPLAIN 命令看到了索引覆盖和回表的两种情况。你能用 optimizer trace 来分析一下这两种情况的成本差异吗?
答:如下代码所示,打开 optimizer_trace 后,再执行 SQL 就可以查询 information_schema.OPTIMIZER_TRACE 表查看执行计划了,最后可以关闭 optimizer_trace 功能:
假设我们为表 person 的 NAME 和 SCORE 列建了联合索引,那么下面第二条语句应该可以走索引覆盖,而第一条语句需要回表:
通过观察 OPTIMIZER_TRACE 的输出可以看到,索引覆盖(index_only=true)的成本是 1.21 而回表查询(index_only=false)的是 2.21,也就是索引覆盖节省了回表的成本 1。
索引覆盖:
回表:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
这篇技术文章涵盖了数据库索引、空值处理、异常处理等多个方面的技术问题。其中包括了对数据库索引的优化和成本分析,Java中对象判断、集合类的contains方法区别,以及浮点数和整型数字在MySQL中的定义和浮点数准确计算的实现方法。此外,还介绍了在使用ArrayList的remove方法时可能遇到的ConcurrentModificationException异常,以及如何通过迭代器的remove方法或removeIf方法来解决这个问题。另外,还讨论了ConcurrentHashMap和HashMap对null值的处理差异,以及在MyBatis框架中如何实现类似Hibernate的动态SQL功能。此外,还涉及了在finally代码块中抛出异常的问题,以及手动抛出异常时建议使用JDK中的标准异常的原因和适用场景。整体而言,这篇文章内容丰富,涉及了多个技术领域,适合技术人员快速了解和学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 业务开发常见错误 100 例》,新⼈⾸单¥59
《Java 业务开发常见错误 100 例》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 镞砺括羽我有个问题想问 where 1=1 是不是换成<where>更好一些2022-05-1112
- fusion老师为什么我查询的结果是 SET SQL_SELECT_LIMIT=1000 { "steps": [ ] } 0 false 语句是: SET optimizer_trace="enabled=on"; SELECT name,score FROM person WHERE NAME='name1' SELECT * FROM information_schema.OPTIMIZER_TRACE; SET optimizer_trace="enabled=off";2024-01-17归属地:福建
收起评论