Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

    • 海量 QQ 号去重【腾讯】
    • 百万级别数据的 Excel 如何快速导入到数据库中
    • 从 MySQL 千万条数据中搜索到指定数据
    • 为什么复杂的架构一定要做分层设计?
    • 什么是网络四元组
  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

  • Java 8 + 特性类

  • 其他技术类

  • 常见面试题
  • 数据处理与存储类
刘博
2025-12-28

从 MySQL 千万条数据中搜索到指定数据

核心是 “利用索引 + 优化查询逻辑”,避免全表扫描,具体方案:

  • 1. 建立合适的索引:
    • 若按单字段查询(如WHERE id=123),建立主键索引(主键默认自增索引,查询效率 O (log n))或唯一索引;
    • 若按多字段查询(如WHERE user_id=1 AND create_time>='2024-01-01'),建立联合索引(遵循 “最左前缀原则”,将过滤性强的字段放前面);
    • 避免过度索引(索引会增加写入开销),仅为高频查询字段建索引。
  • 2. 优化查询 SQL:
    • 避免使用SELECT *,只查询需要的字段(减少数据传输和内存消耗);
    • 避免在 WHERE 子句中对字段做函数操作(如DATE(create_time)='2024-01-01'会使索引失效),改为create_time BETWEEN '2024-01-01 00:00:00' AND '2024-01-01 23:59:59';
    • 用LIMIT限制返回结果(如LIMIT 1,找到匹配数据后立即终止查询)。
  • 3. 数据库层面优化:
    • 分库分表:若数据量超千万且单表查询仍慢,按水平分表(如按 user_id 哈希分表)或垂直分表(拆分冷热数据),缩小查询范围;
    • 开启查询缓存(MySQL 8.0 已移除,可通过 Redis 实现应用层缓存):将高频查询结果缓存,避免重复查库;
    • 优化 MySQL 配置:增大innodb_buffer_pool_size(建议设为物理内存的 50%-70%,让更多数据缓存到内存)。

上次更新: 12/30/2025
百万级别数据的 Excel 如何快速导入到数据库中
为什么复杂的架构一定要做分层设计?

← 百万级别数据的 Excel 如何快速导入到数据库中 为什么复杂的架构一定要做分层设计?→

最近更新
01
CPU 使用率较高排查和解决
12-29
02
JVM OOM 问题如何排查和解决
12-29
03
接口防刷怎么实现?
12-29
更多文章>
Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式