0

0

PHP 数据库索引优化面试题解析

冷炫風刃

冷炫風刃

发布时间:2026-03-04 11:02:58

|

914人浏览过

|

来源于php中文网

原创

数据库索引优化核心在于理解“为何加、加在哪、为何变慢”:高查询频次且高区分度字段(如email、user_id)适合建索引,避免低区分度、频繁更新或text/blob字段;通过慢日志、explain及php监控定位未走索引的慢查;复合索引需遵循等值→范围→排序顺序;索引过多会降低写性能、增加磁盘占用并导致优化器误选,需依业务读写特征权衡。

php 数据库索引优化面试题解析

数据库索引优化是 PHP 后端开发面试中的高频考点,核心不在于死记命令,而在于理解“为什么加索引”“加在哪”“加了反而变慢怎么办”。下面从实际场景出发,拆解几个典型问题。

哪些字段适合建索引?

适合建索引的字段需同时满足:查询频率高、区分度高(如 user_id、email)、常出现在 WHERE、ORDER BY、JOIN 条件中。比如用户登录时查 emailstatus,组合索引 (email, status) 比单列索引更高效——MySQL 能用最左前缀原则命中。

避免对以下字段建索引:

  • 低区分度字段(如 gender、is_deleted),索引选择性差,优化效果微弱
  • 频繁更新的字段(如 view_count),每次更新都触发 B+ 树调整,写入开销大
  • TEXT/BLOB 类型字段,除非加前缀索引(如 INDEX(title(50))

如何发现没走索引的慢查询?

在 PHP 应用中,不能只看页面响应时间,要下沉到 SQL 层。常用方法:

立即学习PHP免费学习笔记(深入)”;

  • 开启 MySQL 慢查询日志:slow_query_log = ON,配合 long_query_time = 1
  • EXPLAIN 分析执行计划:重点看 type(尽量为 ref/const)、key(是否用了索引)、rows(扫描行数是否远小于表总行数)
  • PHP 中记录耗时并打印 SQL(如 Laravel 的 DB::listen()),对 >100ms 的查询自动触发 EXPLAIN

注意:即使写了 WHERE status = 1,如果 status 没索引或类型不匹配(如字段是 TINYINT,却传字符串 '1'),也会全表扫描。

iestore开源网上商店系统
iestore开源网上商店系统

IEStore是一款B2C独立网上商店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。IEStore网上商店系统不仅在产品功能、稳定性、安全性和SEO支持(搜索引擎优化)等方面具有在同类产品领先地位,重要的是在功能架构上、操作上符合国际化标准,成为国际化电子商务的最佳软件选择之一。功能概要国际化标准IEStore网上商店系统是一个带有多国

下载

复合索引顺序怎么定?

顺序决定索引能否被复用。口诀:等值查询放前面,范围查询放最后,排序字段可跟在后面。

例如查询:SELECT * FROM orders WHERE uid = 123 AND created_at > '2024-01-01' ORDER BY amount DESC

  • 推荐索引:INDEX(uid, created_at, amount)
  • 错误写法:INDEX(created_at, uid) —— 因为 created_at 是范围查询,后续字段无法使用最左前缀
  • 若还有 WHERE uid = ? AND status = ?,且 status 区分度高,可扩展为 INDEX(uid, status, created_at)

索引不是越多越好,为什么?

每多一个索引,都会带来三重代价:

  • 写性能下降:INSERT/UPDATE/DELETE 时,MySQL 要同步更新所有相关索引的 B+ 树
  • 磁盘空间占用:索引本身需要存储,尤其大文本前缀索引或联合索引字段多时明显
  • 优化器选错索引:当多个索引都可能命中时,MySQL 统计信息不准可能导致选错执行计划(可用 FORCE INDEX 临时干预,但属下策)

上线前建议用 pt-duplicate-key-checker 工具检查冗余索引,例如已有 (a,b),再建 (a) 就是冗余。

索引优化本质是权衡:读多写少的报表类表可适当多建;高频交易类表则优先保写入吞吐。真正考察的是你能否结合业务场景做判断,而不是背出 B+ 树原理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

338

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

290

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

708

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

384

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

135

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

82

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

75

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

5

2026.03.04

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号