![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 66
加浓美式好喝
when you fall down,just try again.
展开
-
聚簇索引和非聚簇索引
一张表只能有一个聚簇索引,因为聚簇索引决定了数据行的物理存储顺序与索引的键值顺序相同,也就是说,索引的键值决定了数据在磁盘上的物理排列方式。而Myisam存储引擎在磁盘上的文件是以.MYD结尾的表数据 和.MYI结尾的表索引,这其实就是非聚簇索引。由于索引存储的是索引键值和对应的行地址,而不是实际的数据行,因此可以减少从磁盘读取数据的次数,降低了I/O开销。非聚簇索引的叶子节点存放的是索引值(目录)以及存放真实数据的地址。Innodb存储引擎在磁盘上的文件是以.idb结尾的文件,它存放的是表索引+数据。原创 2024-03-31 14:47:05 · 190 阅读 · 0 评论 -
为什么索引的底层结构是B+树
1.数据库与数据交互的单位是page,而B+树的每个节点都是一个page,访问一个节点,就相当于进行了一次I/O操作。而B树的同层节点没有指针指向,所以可能需要在非叶子节点进行递归搜索,相对来说操作复杂度更高。数据查询的时间主要依赖于磁盘IO的次数,二叉树深度越大,查找的次数越多,性能越差。在AVL树中,为了保持树的平衡性,可能需要进行频繁的旋转操作,例如左旋和右旋。红黑树在范围查询操作中可能需要进行中序遍历,而且遍历过程中的节点访问顺序是不确定的,这导致了范围查询的效率较低。为什么不用二叉搜索树。原创 2024-03-30 15:18:11 · 534 阅读 · 0 评论 -
为什么用了索引,搜索速度还是很慢
然而,如果我们在 "name" 列和 "age" 列上都创建了索引,并且查询条件中只包含 "name" 列,数据库系统可能会错误地选择使用 "age" 列上的索引来执行查询,因为它认为 "name" 列的索引并不是最优选择。因此,在选择索引列时,需要考虑查询的频率和字段的选择性,尽量选择在查询中经常被用到并且具有较高选择性的列作为索引列,以提高索引的效率和搜索速度。例如,如果一张表上存在多个索引,而且这些索引的列有重叠,那么数据库系统在选择索引时可能会选择不合适的索引,导致索引失效,从而无法提高查询性能。原创 2024-03-30 14:20:43 · 751 阅读 · 0 评论 -
MySQL——锁
行级锁可以提高数据库的并发性能,因为它允许多个事务同时对同一张表的不同行进行操作,而不会发生锁竞争。只有当两个事务试图修改同一行数据时,才会发生锁竞争,其中一个事务会被阻塞,直到另一个事务释放锁。页级锁可以提高并发性能,因为它允许多个事务在同时操作不同的数据页,而不会发生锁竞争。只有当两个事务试图同时修改同一个数据页时,才会发生锁竞争,其中一个事务会被阻塞,直到另一个事务释放锁。另外,全局锁只能阻止写操作,全局锁是一种数据库锁定机制,它可以锁定整个数据库,阻止其他会话对数据库的读写操作。原创 2024-03-30 13:28:00 · 388 阅读 · 0 评论 -
MyISAM和InnoDB
3.ACID属性:InnoDB引擎遵循ACID属性(原子性、一致性、隔离性和持久性),这意味着它可以确保事务在数据库中的操作是原子的、一致的、隔离的和持久的。InnoDB 使用自己的方式管理数据和索引的存储,采用行级存储方式,每行数据包含着完整的记录,包括索引键和数据。:InnoDB 存储引擎支持事务,具有较强的事务一致性和数据完整性保证,适合对数据一致性要求较高的应用场景,如金融、电子商务等。4.不支持一致性:MyISAM表在发生故障或崩溃时,可能会出现数据不一致的情况,因为它不提供事务的一致性保证。原创 2024-03-30 12:52:10 · 1061 阅读 · 0 评论 -
对事务的理解
事务原创 2023-05-13 14:14:17 · 188 阅读 · 3 评论