首页 > 解决方案 > 自定义表上的大型查询 - 内存问题

问题描述

我正在构建一个插件来创建可以由用户兑换的代码。我需要在 WP_LIST_TABLE 中显示所有生成的代码。我创建了一个名为“bo_codes”的自定义表,它看起来像这样。

表:https ://visual23.com/table.png

我的查询看起来像这样。

$query = "
SELECT $wpdb->bo_vaping_codes.bo_code, $wpdb->bo_vaping_codes.assigned_product_name, $wpdb->bo_vaping_codes.status, $wpdb->bo_vaping_codes.run_number, $wpdb->bo_vaping_codes.author_name, $wpdb->bo_vaping_codes.date_created
FROM $wpdb->bo_vaping_codes
ORDER BY $wpdb->bo_vaping_codes.date_created DESC;
";
$data = $wpdb->get_results( $query, ARRAY_A );

我做了一个测试并生成了 100,000 个代码,我得到了这个错误。“致命错误:允许的内存大小为 268435456 字节已用尽(试图分配 72 字节)”

我可以对数据库或查询做些什么来减少使用的内存吗?我不确定我是否做错了什么,或者我只是在推动它的极限。

标签: mysqlwordpressperformance

解决方案


这是一个 UI 设计问题,而不是数据库问题。

分页不合理——回到第一条评论: 没有用户会想要查看包含 100k 个项目的列表。 我会补充:“是否分页”。所以,重新思考 UI;决定在不提供所有信息的情况下显示有用信息的方式。

也许首先询问列出项目的“产品类别”。

也许首先是“作者”。

也许它是在哪个月份“创建”的。

任何对应用有意义的东西。但是要确保分组不会导致一个不合理的长列表,然后一次显示或分页。

对于 100K 项目,在到达实际列表之前经过两个级别的挑选可能是合理的。这通常会将事情减少到一次选择的 100 件以下。


推荐阅读