MySQL 索引详解
MySQL 索引 (Index) 是一种特殊的数据结构,存储着表中一列或多列数据的排序值和指向对应数据行的物理指针。它的主要目的是提高数据库查询的效率。通过创建索引,数据库系统可以快速定位到所需的数据行,而无需扫描整个表。然而,索引并非越多越好,不当的索引使用反而可能降低性能,因此深入理解索引的工作原理和优化策略至关重要。 核心思想:索引的本质是一种“文件目录”或“字典检索”,它通过牺牲一定的存储空间和维护成本,来大幅提升数据检索的速度。 一、为什么需要索引?想象一下一本没有目录的书,当你想查找某个特定主题时,你必须从头到尾翻阅整本书,效率非常低下。数据库查询也是一样。 当未对表中的列创建索引时: 全表扫描 (Full Table Scan):每次查询都需要遍历表的每一行,逐一比对条件。对于小表来说可能影响不大,但对于包含数百万甚至数千万行记录的大表,全表扫描将导致灾难性的性能问题。 排序性能下降:如果查询结果需要排序(ORDER BY),但没有合适的索引,数据库需要在内存或磁盘上对结果集进行排序,开销巨大。 连接 (JOIN) 性能下降:多个表进行连接操作时,如果没...
从单机到哨兵,一张图理清redis架构演进!
Redis 的架构是逐步演进而来的,正所谓“罗马不是一天建成的”。 2010 年:单机版 Redis 当 Redis1.0在 2010 年首次发布时,整体架构非常简单,通常作为业务系统的缓存使用。不过,Redis 的数据是存储在内存中的,一旦重启,数据就会全部丢失,导致请求会直接打到数据库上,带来较大的压力。 2013 年:持久化机制上线 2013 年,Redis2.8版本发布,解决了之前“重启就丢数据”的问题。Redis 引入了 RDB(内存快照)机制,用于定时将内存中的数据持久化到磁盘。同时还支持 AOF(只追加文件)方式,将每一次写操作都记录到日志文件中,实现更高级别的持久化保障。 2013 年:主从复制机制 同样在 Redis2.8中,官方引入了主从复制功能,提升了系统的高可用性。主节点负责处理实时的读写请求,从节点则负责同步主节点的数据,起到备份和读扩展的作用。 2013 年:Sentinel 哨兵机制上线 在 Redis2.8版本中,引入了 Sentinel(哨兵)机制,用于实时监控 Redis 实例的运行状态。它主要负责以下几个方面的工作: ...
