FoxTian
FoxTian
在 Java 集合(下)中,讲到了HashMap 和 Hashtable 的区别,可以再增加一点: **哈希值使用**:HashTable 直接使用对象的 hashCode,而 HashMap 重新计算 hash 值(二次哈希)。
🏠 [MySQL高性能优化规范建议总结](https://javaguide.cn/database/mysql/mysql-high-performance-optimization-specification-recommendations.html#常见索引列建议) 原文: >建立索引的目的是:希望通过索引进行数据查找,减少随机 IO,增加查询性能 ,索引能过滤出越少的数据,则从磁盘中读入的数据也就越少。 > >- 区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数) >- 尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO 性能也就越好) >- 使用最频繁的列放到联合索引的左侧(这样可以比较少的建立一些索引) 关于第二点,尽量把字段长度小的列放在联合索引的最左侧。 文中给出的理由是因为字段长度越小,一页能存储的数据量越大,IO 性能也就越好。 但在 MySQL InnoDB 存储引擎的 B+ 索引树数据结构中,非叶子节点存储的每个索引条目中包含了这块索引搜索树的所有的索引字段值,以及指向下一级的指针。 因此,对于已经确定的联合索引中的这些索引,无论怎么调换位置应该也改变不了存储的索引条目的大小,一页能存储的数据量还是那么多。 所以我觉得这个第二条并不能作为选择索引顺序的参考条件,更像是作为选择什么字段充当索引的建议。 即: - 对于索引建立的原则,建议使用数据类型小的字段作为索引。当然,这个建议更适合于主键的选择,因为在 Innodb 存储引擎中,主键字段不仅存储在聚簇索引中的每个节点,还存在于非聚簇索引的叶子节点。参考这条建议的主键可以节省更多的内存与磁盘空间。
🏠 [SQL语句在MySQL中的执行过程](https://javaguide.cn/database/mysql/how-sql-executed-in-mysql.html#_2-1-查询语句) 原文内容: >说了以上这么多,那么究竟一条 SQL 语句是如何执行的呢?其实我们的 SQL 可以分为两种,一种是查询,一种是更新(增加,修改,删除)。我们先分析下查询语句,语句如下: > >```sql >select * from tb_student A where A.age='18' and A.name=' 张三 '; >``` > >结合上面的说明,我们分析下这个语句的执行流程: > >- 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 SQL...