mysql - 自定义表上的大型查询 - 内存问题
问题描述
我正在构建一个插件来创建可以由用户兑换的代码。我需要在 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 字节)”
我可以对数据库或查询做些什么来减少使用的内存吗?我不确定我是否做错了什么,或者我只是在推动它的极限。
解决方案
这是一个 UI 设计问题,而不是数据库问题。
分页不合理——回到第一条评论: 没有用户会想要查看包含 100k 个项目的列表。 我会补充:“是否分页”。所以,重新思考 UI;决定在不提供所有信息的情况下显示有用信息的方式。
也许首先询问列出项目的“产品类别”。
也许首先是“作者”。
也许它是在哪个月份“创建”的。
任何对应用有意义的东西。但是要确保分组不会导致一个不合理的长列表,然后一次显示或分页。
对于 100K 项目,在到达实际列表之前经过两个级别的挑选可能是合理的。这通常会将事情减少到一次选择的 100 件以下。
推荐阅读
- laravel - 命令“备份:运行”不存在。在使用控制器执行命令时
- c++ - 计算第 1 百万个斐波那契数
- java - 当我打印 ArrayList 时,为什么我得到列表值而不是参考值
- c++ - C ++映射使用字符串值作为键
- html - 如何过早停止动画执行
- excel - 获取Excel中从一张表到另一张表的单元格的自动颜色
- python - 如何迭代soup.findAll('tag1','tag2','tag3')中的多个标签?
- csv - 如何在 CSV 文件中为 jmeter 中的一个用户的每一行写入响应数据
- angular - 以角度 10 将变量从一页传递到另一页
- python - 带有 for 循环的 tkbutton 主循环