当前位置: 首页 > news >正文

wordpress整合ecms同步登录慧达seo免登录发布

wordpress整合ecms同步登录,慧达seo免登录发布,wordpress怎样上传主题,网站建设中html5在日常测试工作中,我们经常会遇到分页查询接口,例如: GET /product/search?keyword&pageNum1&pageSize10乍看之下,这样的分页接口似乎并无性能问题,响应时间也很快。但在一次性能压测中,我们复现了…

在日常测试工作中,我们经常会遇到分页查询接口,例如:

GET /product/search?keyword=&pageNum=1&pageSize=10

乍看之下,这样的分页接口似乎并无性能问题,响应时间也很快。但在一次性能压测中,我们复现了一个典型的深分页性能瓶颈,并深入分析了其成因与优化思路,本文记录该过程与结论。

📌 压测背景

接口路径:/product/search

功能描述:根据关键字模糊查询商品列表,支持分页(pageNum, pageSize)。

✅ 数据规模
为了模拟真实生产场景,我们使用以下 SQL 批量造数,构造了 100万+商品数据(pms_product 表):


SET @max_id := (SELECT IFNULL(MAX(id), 0) FROM pms_product);
SET @row := 0;INSERT INTO pms_product (id, brand_id, product_category_id, name, sub_title, price,publish_status, verify_status, sort, description, delete_status,new_status, recommand_status, sale, stock, low_stock, unit, weight,preview_status, service_ids, keywords, note, product_sn
)
SELECT @max_id + seq AS id,FLOOR(1 + RAND() * 10),FLOOR(1 + RAND() * 10),CONCAT('商品-', @max_id + seq),'',ROUND(RAND() * 1000, 2),1, 1, @max_id + seq, '', 0, 1, 1, 100, 100, 10, '', 1.5, 1,'1,2,3', '', '', CONCAT('SN', LPAD(@max_id + seq, 6, '0'))
FROM (SELECT @row := @row + 1 AS seqFROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t1,(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t2,(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t3,(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t4,(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t5,(SELECT @row := 0) rLIMIT 100000
) temp;

数据字段包含多个维度如:商品分类、品牌、价格、上下架状态、是否删除等。

🔍 性能压测结果对比

我们使用 JMeter 对分页接口进行了压测,以下是对比结果:
正常分页压测结果:
在这里插入图片描述
深分页压测结果:
在这里插入图片描述

🚩 分页页码:pageNum=1(正常分页)

样本数平均响应时间最大响应时间吞吐量 (TPS)平均返回字节数
102263ms2419ms3.2/sec9317 字节

🚩 分页页码:pageNum=100000(深分页)

样本数平均响应时间最大响应时间吞吐量 (TPS)平均返回字节数
103245ms3653ms2.4/sec4224 字节

🧠 为什么深分页会变慢?
❗ 1. Offset 越大,代价越高
分页底层使用 LIMIT offset, size,如:
1)深分页执行的sql:
在这里插入图片描述


SELECT * FROM pms_product 
WHERE delete_status = 0 AND publish_status = 1 
ORDER BY id 
LIMIT 99990, 10;

该查询需要:

  • 遍历前 100000 行(offset),丢弃
  • 返回最后 10 行

即使加了索引,MySQL 也必须扫描 offset + limit 条数据后再丢弃前面。
2)正常分页执行的sql:
在这里插入图片描述

SELECT count(0) FROM pms_product WHERE delete_status = 0 AND publish_status = 1;
SELECT ... FROM pms_product WHERE delete_status = 0 AND publish_status = 1 LIMIT 10;

✅ 结论:

  • LIMIT 10 是在数据前面截取的,性能还行,Rows_examined扫描了28行;
  • count(0) 已扫描 100w 行(较慢);

❗ 2. explain 显示没有使用覆盖索引
我们对深分页 SQL 执行了 EXPLAIN 分析:


EXPLAIN SELECT * FROM pms_product 
WHERE delete_status = 0 AND publish_status = 1 
ORDER BY id LIMIT 99990, 10;

在这里插入图片描述

❗ 问题分析:

字段说明
type=index说明是走了索引,但是全索引扫描(index scan),相当于扫描整张表的索引部分。
key=PRIMARY表示使用的是主键索引(id)。
rows=100010MySQL 预估会扫描大约 10 万行来定位 LIMIT 起始位置。
Extra=Using where表示 WHERE 条件在过滤过程中才判断,并没有用到复合索引来提前过滤。

⚠️ 这意味着:

  • LIMIT 100000, 10 会导致 MySQL 扫描超过 10 万条记录,性能非常差。
  • WHERE 条件没有使用到合适的索引(possible_keys 为 NULL)。

✅ 性能优化建议
1. 避免深分页 —— 改用“基于游标”方式
例如前端传入上一次返回结果的 last_id,实现类似“加载更多”:


SELECT * FROM pms_product 
WHERE delete_status = 0 AND publish_status = 1 AND id > 上一次最大 id
ORDER BY id
LIMIT 10;

优点:

  • 避免 offset,性能线性增长
  • 可以用覆盖索引,避免回表
  • 建立合理的联合索引
    如分页条件为:

WHERE delete_status = 0 AND publish_status = 1 ORDER BY id

建议加:


CREATE INDEX idx_status_id 
ON pms_product(delete_status, publish_status, id);

这样可以走索引,减少扫描行数。

3. 考虑分页缓存
如果某些页经常访问,可以考虑将分页结果缓存到 Redis,提升响应速度。

📝 总结

深分页是一种常见但代价昂贵的分页方式,特别在数据量大、页码大的时候:

  • offset 会严重拖慢查询
  • 即使不使用 count(),深分页依然很慢
  • 优化建议包括:改游标分页、加索引、用缓存等
http://www.dtcms.com/a/489410.html

相关文章:

  • 网站排名的优化建设工程网站建筑工程预算
  • 广州网站关键词优化推广淘宝关键词挖掘工具
  • 微网站如何做横幅链接网页设计与网站的关系
  • 投融网站建设方案福州百度推广排名优化
  • 微网站免费模板网站备案变更 能让首页关闭 二级域名继续
  • 资阳建设机械网站网站优化都是怎么做的
  • 成立公司在什么网站网站自适应手机怎么
  • 2核4g 1m做网站wordpress 微信 同步
  • 医疗网站建设中心2017网站主流设计风格
  • 中山企业网站多少钱合肥网站建设方案策划
  • 创建手机网站免费西安网站网页设计
  • 简约大气风格网站模板网络促销策略有哪五种
  • 建设部网站施工员查询山西晋中网站建设
  • 织梦网站后台怎么登陆百度wordpress插件下载
  • 上海松一网站建设域名备案需要哪些材料
  • 网站建设用素材网站优化 网站建设公司
  • 模板王怎么下载字体网站排名乐云seo
  • 杭州专业制作网站php户外运动产品企业网站源码
  • 2狠狠做网站wordpress 媒体库清理
  • dw怎样去除网站做的页面模板金网科技
  • 网站建设完成大概多久m3u8视频可以永久保存吗
  • 建设网站对于客户视频网站开发项目
  • 太原百度网站排名优化phpstudy建wordpress
  • 青岛企业级网站设计wordpress去重复
  • 网站编程设计心得体会wordpress 模板语言
  • 网站备案关闭网站建设前期准备工作总结
  • 吉林省建设厅证件查询网站wordpress标签设置主页
  • 做网站客户一般会问什么问题WordPress打开后是搜索结果
  • 萝岗区网站建设推广云南公共资源交易中心
  • 网站策划机构网站搭建品牌