草庐IT

MySQL - INNER JOIN 12 Tables with LIMIT 30 or Create View or Denormalization?

coder 2023-10-12 原文

我正在使用 MySQL,所有事务的规范化表。

现在,我需要获取数据作为日志,但它需要加入超过 12 个表来记录我们需要查看的所有数据,只有最后 30 个提交的数据(完成/拒绝)将显示在分页中(日志页面 1)但仍然有下一个最后 30 个分页。

9 INNER JOIN
3 LEFT JOIN (It's Admin Order Form when customer Ordering via Offline (friend))
WHERE order_status = 1 OR order_status = 2 (done & reject)
ORDER BY order_date DESC
LIMIT 30 (limiting 30 per page with pagination)
The order data is more than 2.000.000 rows for 4 tables in INNER JOIN connected in PK & FK.

如果我加入 12 个表或我应该做其中的 1 个,有什么问题吗?

1. Create View in MySQL 
**OR**
2. Denormalize data (Create 1 more table for order_log), but I think it would
cost so many storage size
**OR**
3. Using SSD ?

有时我们需要确保通过规范化节省存储空间,有时我们需要更快的性能。 (但仍然不想使用非规范化数据作为日志,因为数据大小)。

有什么解决办法吗?谢谢。

最佳答案

视情况而定。

  • VIEW 只是语法糖。它不提供额外的性能。但是,它可能使您的 SQL 更易于阅读。

  • 剥夺国籍可能有帮助。重新制定可能会有所帮助。更重要的是,首先专注于查找 30 行可能会有所帮助。 然后 处理剩余的JOIN。 (如果没有看到查询,我不能更具体,包括哪些列在哪些表中。)

  • 如果您受 I/O 限制,SSD 将提供帮助。对于数千行,您不太可能受 I/O 限制。一百万行可能会发现差异。 (需要更多信息才能详细说明。)

  • 不要规范化“连续”值,例如 FLOATsDATETIMEs。这很可能使“范围”测试效率低下。 More discussion.

  • 请提供SHOW CREATE TABLEEXPLAIN SELECT ...

  • ENUM 有时是节省空间避免规范化的好方法。

关于MySQL - INNER JOIN 12 Tables with LIMIT 30 or Create View or Denormalization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921480/

有关MySQL - INNER JOIN 12 Tables with LIMIT 30 or Create View or Denormalization?的更多相关文章

随机推荐