2025-08-18面试题(nginx,mysql,zabbix为主)

1.查看nginx连接数

1.1 用 netstat/ss 查看端口连接数

复制代码
netstat -anp | grep 80 | wc -l
ss -ant | grep 80 | wc -l

1.2.使用 Nginx 内置状态模块 stub_status(最常用状态页)

在 nginx 配置里增加一个监控接口

复制代码
server {
    # 监听端口
    listen 8080;
    # 服务器名称
    server_name localhost;

    # 配置 Nginx 状态监控路径
    location /nginx_status {
        # 启用 stub_status 模块(需 Nginx 编译时支持)
        stub_status on;
        # 仅允许本地 IP 访问
        allow 127.0.0.1;
        # 拒绝其他所有 IP 访问
        deny all;
    }
}
复制代码

1.3.使用第三方监控工具

复制代码
Prometheus + Grafana:通过 nginx-exporter 收集 Nginx 连接数、请求数、响应时间等指标
Zabbix / Nagios:通过插件监控 Nginx 活动连接数
Datadog / NewRelic:云端可视化监控

1.4.通过日志分析

可以用 awkgoaccess 等工具分析访问日志:

2.MySQL 查看连接情况

2.1.使用 SHOW PROCESSLIST

查看当前连接数统计

show status like 'Threads_connected'; -- 当前活跃连接数

show status like 'Threads_running'; -- 正在执行语句的连接数

2.2.查询 information_schema.PROCESSLIST

2.3.查看 MySQL 状态变量

2.4.使用性能模式(Performance Schema)

2.5.使用命令行工具

2.6.使用监控工具

MySQL Workbench:可实时查看连接数和状态

Percona Monitoring and Management (PMM):提供图形化连接趋势、查询性能

Zabbix / Prometheus + mysqld_exporter:自动化监控连接数、慢查询等

3.怎么自定义一个zabbix监控项

配置 Zabbix 监控项(Item)主要有几个步骤: 创建主机 → 添加监控项 → 配置触发器 → 配置图表**。我给你详细说明,并以 MySQL 监控为例。**

1️⃣ 登录 Zabbix

  1. 打开 Zabbix Web 界面

  2. 使用管理员账号登录


2️⃣ 创建主机(Host)

  1. 配置 → 主机 → 创建主机

  2. 填写:

    • 主机名 :例如 mysql-01

    • 可见名称:可选

    • 群组:选择已有群组或新建(如 MySQL 服务器)

    • 接口:填写被监控服务器 IP 和端口

      • Zabbix agent:默认 10050

      • SNMP 或 IPMI 可选


3️⃣ 添加监控项(Item)

  1. 主机页面 → 监控项 → 创建监控项

  2. 填写基本信息:

    • 名称 :监控项显示名,例如 MySQL Threads_connected

    • 类型

      • Zabbix agent(主动或被动采集)

      • Simple check(如 ping)

      • SNMP

      • External script / UserParameter(自定义脚本)

    • 键值(Key):唯一标识

      • 示例:

        • MySQL 线程数:mysql.threads_connected(需在 agent 配置里定义 UserParameter)

        • 自定义 shell:system.run[mysql -e "SHOW STATUS LIKE 'Threads_connected';"]

    • 类型信息(Type of information)

      • 数值(整数/浮点)、文本、日志、布尔
    • 更新间隔:多久采集一次,比如 60 秒

    • 历史数据保存时间:默认 90 天

  3. 点击 添加


4️⃣ 配置触发器(Trigger)

  1. 监控项创建好后 → 触发器 → 创建触发器

  2. 填写:

    • 名称MySQL 连接数过多

    • 表达式:选择监控项 → 设置阈值

      复制代码
      {mysql-01:mysql.threads_connected.last()}>500
      • 表示当前线程数超过 500 就告警
  3. 设置严重等级和告警动作


5️⃣ 可选:创建图表(Graph)

  1. 主机 → 图表 → 创建图表

  2. 选择监控项,设置显示样式(折线/柱状等)


6️⃣ Zabbix Agent 自定义 MySQL 监控示例

如果使用 Zabbix agent + UserParameter:

编辑 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

复制代码
UserParameter=mysql.threads_connected,mysql -uroot -e "SHOW STATUS LIKE 'Threads_connected';" | grep Threads_connected | awk '{print $2}'

UserParameter=mysql.threads_running,mysql -uroot -e "SHOW STATUS LIKE 'Threads_running';" | grep Threads_running | awk '{print $2}'

重启 agent: systemctl restart zabbix-agent

在 Zabbix Web 端用 mysql.threads_connected 创建监控项

4.DML和DDl区别

1️⃣ DML(Data Manipulation Language)数据操作语言

作用:操作数据库中的数据(表里的记录)

常用语句

  • SELECT:查询数据

  • INSERT:插入数据

  • UPDATE:更新数据

  • DELETE:删除数据

特点

  • 操作的是 表中的数据,不改变表结构

  • 支持事务 (可以 COMMITROLLBACK

  • 对数据库影响较小,但会修改内容

示例:

-- 插入数据 INSERT INTO users (id, name) VALUES (1, 'Alice');

-- 更新数据 UPDATE users SET name='Bob' WHERE id=1;

-- 删除数据 DELETE FROM users WHERE id=1;

-- 查询数据 SELECT * FROM users;

2️⃣ DDL(Data Definition Language)数据定义语言

作用:操作数据库结构(表、库、索引等)

常用语句

  • CREATE:创建数据库、表、索引等

  • ALTER:修改表结构

  • DROP:删除数据库、表、索引

  • TRUNCATE:清空表

特点

  • 操作的是 数据库对象和结构

  • 通常不支持事务(执行后立即生效)

  • 会影响数据库的结构和元数据

示例

复制代码
-- 创建表
CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 修改表结构  ALTER TABLE users ADD COLUMN age INT;
-- 删除表  DROP TABLE users;
-- 清空表  TRUNCATE TABLE users;

3️⃣ 总结对比

特性 DML DDL
操作对象 表中的数据 数据库对象/表结构
是否支持事务 支持(可回滚) 通常不支持(立即生效)
影响 数据内容 数据库结构
常用语句 SELECT, INSERT, UPDATE, DELETE CREATE, ALTER, DROP, TRUNCATE

💡 面试小技巧

  • 可以补充 TRUNCATE 既清空表又相当于 DDL,因为它会重置表的自增 ID,立即生效且无法回滚(在大部分数据库中)

  • 强调 DML 操作是"数据层",DDL 操作是"结构层"

5.怎么添加一个新的主机添加到zabbix-server中

1️⃣ 登录 Zabbix 前端

  • 打开 Zabbix Web 界面,输入账号密码登录。

2️⃣ 添加主机

  1. 进入 "配置(Configuration)" → "主机(Hosts)" → "创建主机(Create host)"

  2. 填写主机信息:

    • 主机名称(Host name) :例如 mysql-server-01

    • 可见名称(Visible name,可选):在监控列表中显示的名字。

    • 群组(Groups) :选择或创建一个群组,例如 Database Servers

    • 接口(Agent interface)

      • 输入主机 IP 地址或 DNS 名称。

      • 保留默认端口 10050(Zabbix Agent 端口)。


3️⃣ 关联模板

  • 模板(Templates) 中点击 "选择模板(Select)"

  • 常见模板:

    • Template OS Linux → Linux 系统基础监控

    • Template DB MySQL → MySQL 监控

  • 点击 添加(Add),然后保存主机。


4️⃣ 在主机上安装 Zabbix Agent

Linux 主机示例
复制代码
# 安装 agent (以CentOS为例)
yum install -y zabbix-agent

# 编辑配置文件 /etc/zabbix/zabbix_agentd.conf
Server=<Zabbix Server IP>       # Zabbix 服务器 IP
ServerActive=<Zabbix Server IP> # 主动检查服务器
Hostname=<主机名>               # 必须与 Web 前端主机名一致

# 启动 agent
systemctl enable zabbix-agent
systemctl start zabbix-agent
Windows 主机示例
  1. 下载 Zabbix Agent 安装包。

  2. 安装时填写 Zabbix Server IP。

  3. 启动服务。


5️⃣ 验证主机连接

  • 在 Zabbix Web 前端的 "最新数据(Latest data)" 查看数据是否正常采集。

  • 如果数据未显示,可检查:

    • Agent 是否启动

    • 防火墙是否放行 10050 端口

    • 配置的主机名是否与 Agent 中一致

6.怎么自定义一个zabbix监控项多种方法

1️⃣ 通过 Zabbix Agent 自定义

1.1 UserParameter

  • 编辑 Zabbix Agent 配置文件 /etc/zabbix/zabbix_agentd.conf,添加:

    UserParameter=custom.mysql.connections,mysql -e "SHOW STATUS LIKE 'Threads_connected';" | awk '{print $2}'

  • 重启 Zabbix Agent: systemctl restart zabbix-agent

  • 在 Zabbix Web 前端创建 **Item**:

    • 类型(Type):Zabbix agent

    • 键(Key):`custom.mysql.connections`

    • 数据类型(Type of information):Numeric (unsigned)

    • 单位(Units):可选,例如 `connections`

1.2 自定义脚本

  • 编写脚本,例如 /usr/local/bin/check_disk.sh

    复制代码
    #!/bin/bash
    df / | awk 'NR==2 {print $5}' | sed 's/%//'
  • 在 Zabbix Agent 配置中添加:UserParameter=disk.usage,/usr/local/bin/check_disk.sh

  • 然后在 Zabbix Web 中添加对应 Item。

2️⃣ 通过 Zabbix Trapper 主动采集

  • Trapper 是被动接收数据的方式,由外部脚本主动发送。

  • 示例发送命令:zabbix_sender -z <Zabbix_Server_IP> -s "mysql-server-01" -k custom.mysql.qps -o 123

  • 在 Web 前端创建 Item:

    • 类型(Type):Zabbix trapper

    • 键(Key):custom.mysql.qps

3️⃣ 通过 Zabbix External Script

  • 将自定义脚本放到 Zabbix server 的 /usr/lib/zabbix/externalscripts/

  • 在 Web 前端创建 Item:

    • 类型(Type):External check

    • 键(Key):脚本名,例如 check_mysql_replication.sh


4️⃣ 通过 Zabbix Low-Level Discovery (LLD)

  • 自动发现和监控多实例:

    • 创建一个 LLD 规则,例如发现数据库实例或磁盘分区。

    • 配置 Item prototype 来定义每个发现的实体要监控的指标。

  • 示例:

    • LLD JSON 输出:

      复制代码
      {
        "data":[
          {"{#DISK}":"/"},
          {"{#DISK}":"/var"}
        ]
      }
  • 自动生成磁盘使用监控项。

5️⃣ 使用 Zabbix API

  • 通过 API 添加 Item,适合批量配置:

    curl -X POST
    -H 'Content-Type: application/json'
    -d '{
    "jsonrpc": "2.0",
    "method": "item.create",
    "params": {
    "name": "Custom Connections",
    "key_": "custom.mysql.connections",
    "hostid": "10105",
    "type": 0,
    "value_type": 3
    },
    "auth": "YOUR_AUTH_TOKEN",
    "id": 1
    }'
    http://<ZABBIX_SERVER>/api_jsonrpc.php

小结

方法 场景 优点
UserParameter Linux Agent 灵活,直接调用脚本或命令
Trapper 脚本主动发送 数据主动推送,适合异步采集
External Script Server 执行脚本 无需修改 Agent,跨平台
LLD 动态发现 自动生成大量监控项,减轻手动工作
API 自动化/批量 自动化部署或批量管理监控项

7.zabbix-proxy作用

Zabbix Proxy 是 Zabbix 监控体系中的一个中间组件,主要作用是在分布式或网络隔离环境下收集监控数据,然后再统一发送给 Zabbix Server。详细解释如下:


1️⃣ 作用概述

  1. 数据缓冲和转发

    • Proxy 收集被监控主机的数据,缓存到本地数据库(通常是 SQLite 或 MySQL/PostgreSQL)。

    • 定时将数据批量发送到 Zabbix Server,减少 Server 的压力。

  2. 支持网络隔离或远程环境

    • 对于无法直接访问 Zabbix Server 的远程站点或分支机构,可以部署 Proxy。

    • Proxy 与 Zabbix Server 仅需单向通信,解决防火墙或跨网络访问问题。

  3. 分布式监控

    • 当监控主机数量巨大时,可以通过 Proxy 分担 Server 的压力。

    • 每个 Proxy 管理一部分主机,Server 统一接收 Proxy 上报的数据。

  4. 高可用和容错

    • Proxy 可以缓存数据,即使短时间与 Server 失联,也不会丢失监控数据。

    • 恢复通信后会批量上报,保证数据完整性。

2️⃣ 工作流程

复制代码
监控主机 → Zabbix Agent → Zabbix Proxy → Zabbix Server → 前端展示
  • Agent → Proxy:Proxy 定期轮询或接收被动数据。

  • Proxy → Server:Proxy 将数据定期批量发送给 Server。

  • Server → 前端:集中存储和展示数据。


3️⃣ 使用场景

  • 远程分支机构:Proxy 部署在远程网络内,只需允许 Proxy 与 Server 通信。

  • 大规模集群:大量主机时,使用 Proxy 分担 Server 压力。

  • 高可靠性要求:网络短时中断,Proxy 缓存数据避免丢失。

  • 异地监控:监控不同网络区域,统一管理和收集数据。


4️⃣ 总结

特性 Proxy 作用
数据收集 收集远程主机数据,支持主动和被动模式
缓存 数据暂存本地数据库,避免丢失
转发 批量发送给 Zabbix Server
分布式 减轻 Server 负载,支持远程站点监控
网络隔离 Server 无法直接访问主机时,Proxy 可桥接

8.mysql主从延迟怎么办

MySQL 主从延迟(Replication Lag)是运维中常见的问题,通常发生在从库追不上主库写入速度。解决方法需要排查原因、优化配置和架构调整。下面给你整理一份全面指南:

1️⃣ 查看延迟情况

  1. 使用 SHOW SLAVE STATUS\G(MySQL 5.7 及以下):Seconds_Behind_Master
  • 显示从库落后主库的秒数。
  1. 对于 MySQL 8.0,使用:
复制代码
SELECT * FROM performance_schema.replication_connection_status;
SELECT * FROM performance_schema.replication_applier_status;
  1. 查看二进制日志延迟:
复制代码
SHOW BINARY LOGS;
SHOW MASTER STATUS;

2️⃣ 常见原因

  1. **从库硬件瓶颈:**CPU、内存或磁盘 I/O 不足,导致 SQL 执行慢。

  2. **主库写入过快:**写入量超过从库执行能力。

  3. **慢查询或事务大:**大事务会阻塞从库应用 binlog。

  4. **网络延迟:**主从位于不同数据中心或跨网络,传输慢。

  5. 配置问题: sync_binlog, innodb_flush_log_at_trx_commit, slave_parallel_workers 未优化。


3️⃣ 解决思路

(1)优化从库性能

  • 增加 CPU、内存、IOPS。

  • 调整 InnoDB 参数:

    复制代码
    innodb_buffer_pool_size = 70-80% of memory
    innodb_flush_log_at_trx_commit = 2   # 可以降低同步压力
  • 开启并行复制:

    复制代码
    slave_parallel_workers = 4   # MySQL 5.7+
    slave_parallel_type = LOGICAL_CLOCK

(2)优化 SQL/事务

  • 避免大事务一次提交。

  • 对慢查询添加索引,优化执行计划。

  • 避免频繁更新全表或批量删除大数据。

(3)优化主库写入

  • 批量写入分批提交。

  • 减少不必要的 binlog 写入。

(4)网络优化

  • 主从部署在同一机房或低延迟网络。

  • 对跨机房同步,可以考虑异步或半同步复制。

(5)临时应急措施

  • 停止主库写入一段时间,让从库追上。

  • 调整 slave_skip_errors(慎用)跳过特定错误。


4️⃣ 高级方案

  • 异步/半同步复制:半同步:主库等待至少一个从库确认,减少延迟带来的风险。

  • GTID 复制:更方便故障切换和追踪延迟。

  • 中间缓存:对高并发写入场景,使用 Redis 等缓存缓冲,减轻主库压力。

9.mysql怎么做的读写分离

MySQL 做读写分离通常有几个实现方式,可以用面试口语化的方式总结:

  1. 主从复制(Master-Slave)

    • 主库负责写操作,从库负责读操作,通过 binlog 同步数据。

    • 应用层或者中间件负责把写请求发到主库,读请求发到从库。

  2. 中间件代理

    • 使用 ProxySQL、MaxScale、Mycat 等中间件做读写路由。

    • 中间件感知主从角色,把写请求发主库,读请求发从库。

  3. 应用层控制

    • 在代码里直接区分读写逻辑,例如写操作调用 master 数据源,读操作调用 slave 数据源。
  4. 注意点

    • 要考虑 主从延迟,避免读取到旧数据。

    • 写操作必须严格走主库,避免数据冲突。

10.你们公司有多少台mysql

"我们公司 MySQL 做读写分离主要用 Mycat。主库负责写,从库负责读。Mycat 做中间件代理,它会把写请求自动路由到主库,读请求发到从库。这样可以减轻主库压力,同时提升查询性能。平时也会关注主从延迟,确保读到的数据是最新的。"

可以用更专业、更自然的"加强版"口语化回答:

"我们公司大概有 20~30 台 MySQL ,主从架构,一主多从,主库负责写操作,从库主要做读请求分流和备份容灾。平时会结合 监控和告警 ,实时关注主从延迟和性能指标,一旦发现异常可以快速定位和处理,保证业务平稳运行。同时会定期做 备份和演练,确保容灾方案可用。"

这版强调了监控、容灾和运维能力,听起来更有水平。

我可以帮你压缩成面试中 25~30 秒内流畅讲完的口语版

11.几台redis实例

"我们公司 Redis 大概有 10 来台实例,分布在不同环境和业务线上。有主从结构,部分集群模式,用来做缓存、队列和会话存储。平时会关注内存使用、命中率和持久化状态,确保高可用和性能。"

12.你写过哪些技术文档

"我在运维工作中写过多种技术文档,主要包括几个方面:

  1. 服务器和数据库部署手册:比如 Linux 服务器安装配置流程、MySQL/MongoDB 集群搭建、版本升级步骤等。

  2. 运维流程文档:比如数据库备份和恢复流程、服务器巡检流程、应急故障处理流程。

  3. 监控和告警说明:包括 Zabbix/Prometheus 监控项配置、告警触发条件、处理方法,以及仪表盘的使用说明。

  4. 自动化脚本文档:我写过运维自动化脚本的使用说明,包括参数说明、执行步骤、注意事项。

  5. 故障排查指南:针对常见问题,比如 MySQL 主从延迟、服务挂掉、磁盘满等,整理了排查步骤和解决方案。

这些文档的目标是让团队成员能快速上手,也方便新人理解系统架构,同时保证遇到问题时有标准流程可参考。"

"我写过的技术文档主要包括:服务器部署和配置手册、数据库备份恢复流程、监控和告警配置说明、自动化脚本使用说明,以及一些故障排查指南。主要目的是让团队成员能快速上手,也方便排查问题。"
"我平时写过服务器和数据库部署手册、运维流程文档、监控和告警规则说明、自动化运维脚本使用手册,以及常见故障排查和性能优化指南。写这些文档的时候,我不仅记录操作步骤,还会结合架构设计、依赖关系、注意事项和最佳实践,让团队成员能够快速上手、标准化执行,同时方便新人理解整个系统的架构和运维逻辑,也便于后续优化和故障追踪。"

13.你运维工作待了3年了,平时工作内容是什么

回答这个问题时,可以按 日常工作 / 项目经验 / 工具使用 来拆分,尽量具体且体现价值:


示例回答结构

1️⃣ 日常运维工作

  • 服务器维护:Linux 系统管理、用户权限、磁盘和网络监控、日志排查。

  • 数据库运维:MySQL / Redis / MongoDB 的安装、配置、备份恢复、性能调优。

  • 监控告警:配置 Zabbix / Prometheus / Grafana 监控项,处理告警。

  • 自动化脚本:用 Shell / Python / Ansible / Terraform 自动化日常运维任务。

2️⃣ 项目经验

  • 数据库高可用:部署 MySQL 主从/主主、Redis 哨兵、ProxySQL、MHA 等。

  • 容量规划与优化:定期评估服务器负载、优化 SQL 查询、调整缓存策略。

  • 故障处理:处理系统宕机、服务不可用、数据库延迟、磁盘满等紧急情况。

3️⃣ 工具和技术栈

  • 监控:Zabbix、Prometheus、Grafana

  • 自动化:Ansible、Shell、Python

  • 日志与排错:ELK、journalctl、dmesg

  • 容器化与编排:Docker、Kubernetes 基础运维

4️⃣ 总结亮点

"整体上,我的工作主要是保证系统和数据库稳定可靠,通过自动化和监控提高效率,同时参与部署高可用架构和故障排查。"

✅ 示例回答(口语化)

"我主要负责 Linux 服务器和数据库的日常运维,包括 MySQL 主从部署、备份恢复、性能调优,以及 Redis、缓存和应用服务的维护。我也会做监控告警配置(Zabbix/Grafana)、自动化脚本来提高工作效率。在日常工作中,我经常处理故障排查、系统优化,确保服务稳定可靠,同时参与一些高可用架构的部署和优化。"

14.家常话:你都是怎么学习运维的怎么回答

面试官问这个问题,其实想了解 你的主动性、学习方法、实践能力 。回答可以从 学习渠道 + 实践经验 + 项目驱动 三方面来组织。这里有一个精简、有面试亮点的回答示例:

1️⃣ 学习渠道

  • 书籍和文档:系统学习 Linux、网络、数据库、容器、监控等知识

    例如:《鸟哥的Linux私房菜》《高性能MySQL》《Kubernetes权威指南》

  • 官方文档和社区:跟随技术更新、学习最佳实践

    MySQL 官方文档、Nginx、Zabbix、Prometheus 文档等

  • 在线课程和教程:补充短板或学习新技术

    B站/慕课网/Pluralsight/Kubernetes 官方教程


2️⃣ 实践经验

  • 动手操作:在虚拟机、云服务器、容器里部署服务

    比如:自己搭建 MySQL 主从复制,做高可用实验

  • 小型项目练习:模拟生产环境问题

    写监控告警脚本、搭建日志收集、做自动化运维

  • 总结文档:记录遇到的问题和解决方案,形成自己的知识库


3️⃣ 项目驱动

  • 公司实际项目:参与真实运维任务

    比如:MySQL 集群维护、Nginx 高并发调优、部署 CI/CD 流程

  • 问题导向学习:遇到问题就查资料、做实验

    遇到性能瓶颈,先查监控,再调参数,再验证


✅ 示例回答(口语化)

"我平时主要通过看书、官方文档和在线课程学习运维理论知识,然后会在虚拟机或者云服务器上动手搭建服务,比如 MySQL 高可用集群、Nginx 负载均衡等。遇到问题,我会查官方文档和社区解决方案,调试并总结经验。此外,我也会把自己的操作步骤和问题记录下来,形成个人知识库,方便复盘和提升。"


示例回答

"我学习运维主要通过三种方式:

  1. 理论学习:阅读书籍、官方文档和在线课程,比如《鸟哥的Linux私房菜》、《高性能MySQL》,以及 Kubernetes、Zabbix 官方教程。

  2. 动手实践:在虚拟机或云服务器上搭建环境,例如 MySQL 主从复制、高可用集群,Nginx 负载均衡等,通过实际操作理解原理。

  3. 项目驱动:在公司项目中遇到问题,会查文档、社区和源码,解决问题后总结经验形成知识库,提升解决问题的能力。"

相关推荐
牛奶咖啡138 分钟前
MySQL InnoDB Cluster 高可用集群部署与应用实践(下)
数据库·mysql·innodb cluster·mysql router·mysql路由的安装部署·mysql路由的测试·mgr组复制
冻咸鱼9 小时前
MySQL的配置
mysql·配置
小池先生9 小时前
服务请求出现偶发超时问题,经查服务本身没问题,问题出现在nginx转发。
运维·服务器·nginx
虚行11 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使11 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby11 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in
-Xie-11 小时前
Mysql杂志(三十)——索引失效情况
数据库·mysql
冼紫菜11 小时前
[特殊字符] 深入理解 PageHelper 分页原理:从 startPage 到 SQL 改写全过程
java·后端·sql·mysql·spring
程序新视界12 小时前
什么是MySQL分区?
数据库·mysql·dba
程序新视界12 小时前
实战技巧:使用冗余查询条件解锁MySQL中的索引
数据库·mysql·dba