每日十题八股-2025年2月19日-补充材料

1.什么是慢查询?原因是什么?可以怎么优化?

参考
慢查询是指在数据库中执行时间超过预设阈值的数据库查询。通常,数据库管理员会设置一个阈值(比如1秒或0.5秒),当查询执行时间超过这个阈值时,就会被记录为慢查询。

  1. 查询语句复杂性:子查询和嵌套查询,大量函数,多表连接
  2. 数据量庞大
  3. 缺少索引或索引使用不当
  4. 并发冲突:锁竞争
  5. 硬件资源,cpu,内存紧张等。

每日十题八股-2024年12月31日-5
解决方案:
1.找出慢查询的原因;开启慢查询日志;使用 show processlist 实时监控分析;slow_query_log 文件;使用 mysqldumpslow 工具分析日志,分析查询语句:使用EXPLAIN命令分析SQL执行计划;
2.创建或优化索引,避免索引失效:根据查询条件创建合适的索引,甚至force语句强制执行索引;
3.查询优化:避免使用SELECT *,只查询真正需要的列;使用覆盖索引,即索引包含所有查询的字段;
4.优化数据库表:如果单表的数据超过了千万级别,考虑是否需要将大表拆分为小表;
5.缓存:引入缓存层,如Redis,存储热点数据和频繁查询的结果。

2.MySOL和Redis的区别?

参考

  1. 类型差异:
    MySQL:属于关系型数据库,基于表结构存储数据,支持复杂的SQL查询和事务处理。
    Redis:是内存中的数据结构存储系统,通常用作缓存数据库或NoSQL数据库,支持多种数据结构如字符串、列表、集合、哈希表和有序集合。

  2. 功能与性能:
    MySQL:设计用于持久化存储数据到硬盘,功能全面,包括数据完整性、事务支持等,但受限于磁盘I/O,读写速度相对较慢。
    Redis:专注于快速访问,数据存储在内存中,提供数据持久化策略(如RDB快照、AOF追加文件)以防止数据丢失,读写速度极快,适合处理高并发访问的频繁数据。

  3. 应用需求:
    两者通常配合使用,MySQL负责长期存储和复杂查询,Redis则用于加速热点数据的访问,减少数据库压力。

3.Redis有什么优缺点?为什么用Redis查询会比较快?

参考
Redis 的优点:
1.极高性能:
数据存储在内存中,避免了磁盘I/O瓶颈,读写速度极快,单机QPS可达10万+。
2.简洁高效的设计:
单线程模型避免多线程锁竞争和上下文切换,通过I/O多路复用技术(如epoll/kqueue)高效处理高并发请求。
3.丰富的数据结构:
支持多种数据结构(String、Hash、List、Set、ZSet、Stream),便于直接实现复杂业务逻辑,如排行榜、消息队列等。
4.高扩展性:
支持主从复制、哨兵模式(Sentinel)和集群模式(Cluster),易于水平扩展,应对海量数据和高并发需求。
5.可靠的持久化机制:
提供RDB(快照)和AOF(日志追加)两种持久化方式,可根据业务需求平衡性能与数据安全性。
6.适用场景广泛:
适用于缓存、会话存储、实时排行榜、计数器、分布式锁、消息队列等多种场景。

缺点:
1.内存成本高:
数据存储在内存中,相比磁盘数据库(如MySQL)存储成本更高,需谨慎管理内存,如设置过期时间、使用LRU淘汰策略等。
2.单线程模型的局限性:
单线程设计虽简化了系统复杂度,但无法充分利用多核CPU资源。长时间运行的命令可能阻塞后续请求,影响系统性能。
3.持久化可靠性问题:
RDB快照可能丢失最后一次快照后的数据;AOF日志在高频写入时可能产生性能抖动。需根据业务场景合理配置持久化策略,确保数据可靠性。
4.事务支持有限:
Redis事务不支持回滚操作,且隔离性较弱,无法替代关系型数据库的ACID事务。在需要强事务保证的场景下,需考虑其他解决方案。
5.查询能力受限:
仅支持键值查询,无法像SQL一样进行多条件过滤、聚合或关联查询。在需要复杂查询的场景下,需结合其他数据库系统使用。

内存存储:Redis将数据存储在内存中,而不是磁盘上。内存访问速度比磁盘访问速度快得多,因此Redis能够提供极快的读写性能。
高效数据结构:Redis支持多种高效的数据结构,如字符串、哈希、列表、集合、有序集合等。这些数据结构都经过优化,能够快速执行常见的操作,如获取、插入、删除等。
单线程模型:Redis采用单线程模型,避免了多线程带来的锁竞争和上下文切换开销。同时,Redis通过I/O多路复用技术(如epoll/kqueue)高效地处理多个客户端连接和请求。
优化算法:Redis内部使用了多种优化算法和数据结构,如跳表、压缩列表等,以进一步提高查询性能。
持久化机制:虽然Redis的数据存储在内存中,但它提供了RDB和AOF两种持久化机制,确保数据在崩溃后能够恢复。这些持久化机制在后台运行,不会显著影响查询性能。

4.Redis的数据类型有那些?

具体细节
常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。
随着 Redis 版本的更新,后面又支持了四种数据类型:BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。

这些数据类型各有特点,适用于不同的应用场景。例如,String 类型适用于存储简单的键值对数据;List 类型适用于实现消息队列或存储列表数据;Set 类型适用于需要快速去重和集合运算的场景;Hash 类型适用于存储具有多个属性的小型数据对象;Sorted Set 类型适用于需要排名的场景;Bitmap 类型适用于记录二进制状态;HyperLogLog 类型适用于大规模数据去重统计;Geospatial 类型适用于地理位置查询;Stream 类型适用于实时数据流处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值