通八洲科技

PHP主流架构怎么优化查询性能_索引与缓存【方法】

日期:2025-12-27 00:00 / 作者:雪夜
MySQL索引失效典型场景包括:WHERE条件对字段使用函数、隐式类型转换、OR连接非索引列、LIKE以%开头、索引列参与计算或为空值判断;应避免全表扫描,优化为范围查询并合理使用EXPLAIN分析。

MySQL 索引失效的典型场景有哪些

很多查询变慢不是因为没建索引,而是索引根本没被用上。执行 EXPLAIN 后发现 typeALLindex,基本就是全表扫描了。

常见诱因包括:

PHP-FPM + MySQL 架构下该用哪种缓存策略

不是所有数据都适合缓存,也不是缓存越深越好。关键看读写比、一致性要求和更新频率。

推荐分层组合:

特别注意:写操作后必须主动失效相关缓存,而不是等过期。例如更新文章后,删掉 article:{$id}category:{$cat_id}:list 两个 key。

如何验证索引是否真的提升了查询速度

不能只看 EXPLAINrows 估算值,得测真实执行时间与 IO 开销。

SELECT SQL_NO_CACHE COUNT(*) FROM orders WHERE status = 'paid' AND created_at > '2025-06-01';

SQL_NO_CACHE(MySQL 5.7)或关闭 query_cache_type,避免缓存干扰。同时观察:

Redis 缓存穿透与雪崩怎么防

这是 PHP 服务连 Redis 时最容易翻车的两个点,尤其在商品详情、用户资料类接口。

缓存穿透(查不到还反复打 DB):

缓存雪崩(大量 key 同时过期):

这些逻辑别堆在控制器里,抽成独立的 CacheService::getWithFallback() 方法,否则上线后出问题很难定位。