我正在使用MySQL,规范化表用于所有交易。
现在,我需要将数据作为Log获取,但是需要加入超过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 ?
有时我们需要确保使用规范化保存存储,有时我们需要更快的性能。 (但仍然不想使用非规范化数据进行日志,因为数据大小)。
任何解决方案?谢谢。
答案 0 :(得分:2)
我依赖。
VIEW
只是语法糖。它没有提供额外的性能。但是,可能使您的SQL更易于阅读。
去国有化可能帮助。重新制定可以帮助。更重要的是,将首先集中在找到30行可能来帮助。 然后处理JOINs
的其余部分。 (如果没有查看查询,我就不能更具体,包括哪些列在哪些表中。)
如果您受I / O限制,SSD将帮助。有数千行,您不太可能受I / O限制。一百万行可能看到差异。 (需要更多信息来详细说明。)
请勿规范化“连续”值,例如FLOATs
或DATETIMEs
。很可能使“范围”测试效率低下。 More discussion.
请提供SHOW CREATE TABLE
,EXPLAIN SELECT ...
ENUMs
有时是节省空间和避免规范化的好方法。