1. 为什么要建索引?索引一定能提高性能吗?

  • 场景:一个表有上千万数据,查询 SELECT * FROM user WHERE age=25;

  • 问题:没有索引时会全表扫描,性能差。

  • 解决方案

    • age 建立普通索引,加快查询。

    • 但是索引不是越多越好:

      • 插入、更新会更慢(需要维护索引)。

      • 索引在选择性差(如 gender 字段只有男女)时可能没效果。

2. 覆盖索引是什么?为什么快?

  • 场景:查询用户 ID 列表:

    SELECT id FROM user WHERE age = 25;
    
  • 说明:如果 age 上有索引,且查询只需要返回 id(在索引树中已包含),就不用回表。

  • 优化点:建组合索引 (age, id),查询时只走索引层,不访问数据页。

3. COUNT(*) 为什么慢?如何优化?

  • 场景:统计 order 表的总数,有上千万行。

  • 问题COUNT(*) 会逐行扫描统计。

  • 优化方法

    • 如果是估算:用 EXPLAINrows

    • 如果是精确计数:可以做 冗余表缓存(Redis)。

    • InnoDB 会遍历二级索引+主键,不像 MyISAM 有行数缓存。

4. SQL 执行慢的常见原因?

  • 场景:某个 SQL 在测试库很快,但生产库很慢。

  • 常见原因

    1. 没有走索引,发生全表扫描。

    2. 走了索引但选择性差,优化器放弃。

    3. 隐式转换(WHERE phone = 1380000,字段是 VARCHAR)。

    4. 统计信息不准。

  • 解决

    • 查看 EXPLAIN

    • 强制索引 FORCE INDEX

    • 优化字段类型,避免隐式转换。

    • 更新统计信息 ANALYZE TABLE user;

5. 什么时候建组合索引?最左匹配原则怎么理解?

  • 场景:经常有查询:

    SELECT * FROM user WHERE country = 'CN' AND age = 25;
    
  • 说明

    • 建组合索引 (country, age),比单列索引效率高。

    • 最左匹配:索引从最左边开始生效,(a,b,c) 等价于 (a)(a,b),但不会用 (b) 单独索引。

  • 优化点

    • 多条件查询,优先建组合索引。

    • 条件字段顺序,选择性高的放前面。

6. 如何优化分页查询?

  • 场景

    SELECT * FROM orders ORDER BY create_time LIMIT 100000, 20;
    

    很慢,因为 MySQL 先扫描10万行再丢弃。

  • 优化方法

    1. 记录上一次的偏移:

      SELECT * FROM orders WHERE id > 100000 LIMIT 20;
      
    2. 用覆盖索引 + join:

      SELECT o.* FROM orders o
      JOIN (SELECT id FROM orders ORDER BY id LIMIT 100000, 20) t
      ON o.id = t.id;
      

7. 为什么要分库分表?分库分表后怎么查?

  • 场景user 表超过 1 亿行,查询、写入都慢。

  • 优化思路

    • 分库分表:按 user_id % 8 拆成 8 张表。

    • 查询时通过中间件(ShardingSphere、Mycat)路由。

    • 跨库统计问题 → 用 中间件聚合异步汇总表

8. InnoDB 和 MyISAM 的区别?为什么选择 InnoDB?

  • 场景:设计电商订单表。

  • 区别

    • InnoDB:支持事务、行锁、MVCC,适合高并发。

    • MyISAM:表锁、无事务、计数快,适合只读场景。

  • 面试要点:几乎所有业务型系统用 InnoDB,因为数据安全更重要。

9. 大表优化思路?

  • 场景:订单表 5 亿行,查询和维护很慢。

  • 优化点

    1. 水平拆分(分库分表)。

    2. 冷热数据分离:历史数据归档。

    3. 索引优化:只建必要索引。

    4. 读写分离:主库写,从库读。

    5. 缓存:Redis 缓存热点数据。

10. 如何排查慢查询?

  • 步骤

    1. 打开慢查询日志:

      slow_query_log = ON
      long_query_time = 1
      
    2. EXPLAIN 分析执行计划。

    3. 观察是否用到索引、rows 预估数。

    4. SHOW PROFILE 查看耗时阶段。

    5. 实在不行,用 pt-query-digest 工具分析日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921192.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921192.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921192.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Access开发导出PDF的N种姿势,你get了吗?

目录 基础篇:一行代码搞定 实战篇:让导出更智能 进阶篇:用户体验升级 总结 hi,大家好呀! 今天我们来聊聊一个非常实用的功能——如何用VBA将Access中的数据导出为PDF。 相信很多朋友在日常工作中都遇到过这样的需…

JavaAI炫技赛:电商系统商品管理模块的创新设计与实践探索

一、引言电商行业的竞争日益激烈,电商系统商品管理模块的高效性、智能化程度成为企业提升竞争力的关键因素。Java 作为企业级开发的主流语言,凭借其稳定性和强大的生态系统,在电商系统开发中占据重要地位。而 AI 技术的融入,为商品…

关于如何在PostgreSQL中调整数据库参数和配置的综合指南

关于如何在PostgreSQL中调整数据库参数和配置的综合指南 PostgreSQL是一个非常通用的数据库系统,能够在低资源环境和与各种其他应用程序共享的环境中高效运行。为了确保它将在许多不同的环境中正常运行,默认配置非常保守,不太适合高性能生产数据库。加上地理空间数据库具有…

wps的excel如何转为谷歌在线表格

1. 打开 Google Sheets(sheets.google.com)。 2. 新建一个空白表格。3. 点击菜单 文件 → 导入 (File → Import)。4. 选择在 WPS 保存好的 .xlsx 文件上传。5. 选择 “新建表格” 或 “替换当前表格”,就能直接在 Google Sheets 使用注…

猫头虎AI 荐研|腾讯开源长篇叙事音频生成模型 AudioStory:统一模型,让 AI 会讲故事

🐯猫头虎荐研|腾讯开源长篇叙事音频生成模型 AudioStory:统一模型,让 AI 会讲故事 大家好,我是猫头虎 🐯🦉,又来给大家推荐新鲜出炉的 AI 开源项目! 这次要聊的是腾讯 A…

收藏!VSCode 开发者工具快捷键大全

一、文件操作快捷键1. 打开与关闭文件Ctrl O(Windows/Linux)或 Command O(Mac):打开文件,可以通过输入文件名快速查找并打开相应文件。Ctrl W(Windows/Linux)或 Command W&#…

Simulations RL 平台学习笔记

1. 选择标准 1.1 开源项目,🌟star数量越多越好 2. 常见平台 2.1 🌟18.6k ML-Agents:基于Unity实现 2.2 🌟1.2k Godot RL Agents

【国内电子数据取证厂商龙信科技】IOS 逆向脱壳

我们都知道,大多数的 APP 在开发的时候一般都会加上一层壳,例如 爱加密、梆梆、360、网易易盾等等。那 APK 的脱壳我们见得多了,那 IOS 逆向脱壳又是怎样子的呢?首先咱们先了解一下为什么要砸壳,因为 IOS 开发者开发软…

基于STM32单片机温湿度PM2.5粉尘甲醛环境质量wifi手机APP监测系统

1 基于STM32单片机温湿度PM2.5粉尘甲醛环境质量WiFi手机APP监测系统 本系统旨在实现对环境中温度、湿度、PM2.5粉尘浓度以及甲醛浓度的实时监测,并通过WiFi技术将数据传输至手机APP端,实现移动化与可视化的环境质量检测。系统在硬件上主要依赖STM32单片…

用C++实现日期类

在上学的时候,总是在计算还有多少天放假;在上班的时候,总是在计算还有多久发工资?我们一般通过日历得到结果,那自己能不能实现一些基本的功能呢?答案是可以的!需要实现内容:1. 日期加…

百度网盘基于Flink的实时计算实践

01 概览 随着数字化转型的来临,企业对于数据服务的实时化需求日益增长,在大规模数据和复杂场景的情况下,Flink在实时计算数据链路中扮演着极为重要的角色,本文介绍了网盘如何通过 Flink 构建实时计算引擎,从而提供高性…

【CMake】策略

目录 一.CMake策略简要理解 1.1.第一阶段:童年时期(旧行为,The "Old Way") 1.2.第二阶段:成长与改进(引入新行为,The "New Way") 1.3.第三阶段:…

LLM中的function call

1. 概念 **Function Call(函数调用)**是指在编程中,程序可以通过调用预定义的函数来执行特定的操作。在LLM中,函数调用的概念扩展了模型的能力,使其不仅能够生成文本,还能与外部系统进行交互。通过函数调用…

【系统架构设计(13)】项目管理上:盈亏平衡分析与进度管理

文章目录零、核心思想:经济性与时效性的动态平衡一、盈亏平衡分析:项目的经济生命线1、核心公式与决策逻辑二、进度管理:项目的时效生命线1. **工作分解结构(WBS)**2. 进度管理流程3、关键路径法关键路径法&#xff08…

【SuperSocket 】利用 TaskCompletionSource 在 SuperSocket 中实现跨模块异步处理客户端消息

利用 TaskCompletionSource 在 SuperSocket 中实现跨模块异步处理客户端消息 在使用 SuperSocket 构建 TCP 服务时,我们经常会遇到这样的需求: 服务端接收到客户端数据后,需要将数据交给其他模块处理处理完成后再将结果返回给调用模块或客户端…

《IC验证必看|semaphore与mailbox的核心区别》

月薪30K验证工程师必答:SystemVerilog中semaphore与mailbox的核心区别,及必须用semaphore的场景深度解析 在验证工程师的技能体系里,线程同步与资源管控是区分“基础会用”(20K水平)和“精通工程化”(30K水…

Spring线程池ThreadPoolTaskExecutor‌详解

ThreadPoolTaskExecutor‌写法Bean(name "taskExecutor") public ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(8); // 8核CPU服务器建议值executor.setMaxPoolSize(…

Unity之安装教学

UnityHub下载 下载官网地址:Unity Hub下载地址 打开网址右上角,登录/注册账号 登录完毕后,点击下载 安装Unity Hub 双击傻瓜式安装 安装完成 启动UnityHub 双击启动 左上角设置 设置中文 左上角登录账号 添加免费许可证 设置-许可证-添加 安装…

Redis 集群模式与高可用机制

最近在准备面试,正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解,以及高频业务场景的应对策略系统梳理一遍,既能加深记忆,也能让知识体系更扎实,供大家参考,欢迎讨论。在分布式环境下&a…

Flutter + Web:深度解析双向通信的混合应用开发实践

Flutter Web:深度解析双向通信的混合应用开发实践 前言 在当今快速发展的移动应用开发领域,开发者们始终在寻求一种能够平衡开发效率、跨平台能力和用户体验的完美方案。原生开发性能卓越,但双平台(iOS/Android)开发…