2012-07-01 21 views
0

我试图用列出的项目显示用户的购物车。我想要避免的是 - 在查询结果为2,3或10年之后,查询结果需要很长时间才能在db_cartitems变为10000个项目后显示结果。MySQL数据库效率 - GROUP BY与单独的表格

当组织数据库表结构时,我是否应该有一张表,列出所有先前订购的产品,然后再列出购物车令牌的GROUP BY(我创建了一个rand()号码以确保购物车的物品唯一地绑定到每个购物车建立)。

或者还有更好的方法吗?还是我过分担心?对于通过搜索列出的50,000个订购商品,响应时间相当不错?

商家每天可能获得50或更少的订单,我担心没有提前计划增长。

+2

这听起来像你打算无限期地存储每个购物车,无论是否完成订单。退一步,考虑这是否真的是您需要的,还是您最好从当前正在进行的购物车中拆分已确认的订单。至于性能,50k行是一个非常小的数据库,但不可能回答关于速度的问题 - 针对SLA?在什么硬件上?什么IO等 – Andrew

+0

我会研究“分拆确认订单”到cart_history表,因为他们只需要检索,如果用户想看看自己的“订单历史”。就像你说的那样,50k行非常小 - 如果需要,用户可以稍微等待一段时间,而不是当前正在购物的用户,并且想要“立即”获取项目。我认为这是一个好主意。听起来像是一旦购物车订单成功从Authorize.net返回,就会调用INSERT和DELETE。谢谢! – LITguy

回答

2

你在问什么是你是否应该非规范化你的数据,以便更有效地查询。我建议阅读关于数据库规范化主题的一些内容,以获得有关这些决策的更多背景。

为了回答你的问题,你应该(通常)始终将表格标准化,并考虑非规范化,如果你开始遇到性能问题。我不会担心2,3或10年后会发生什么,因为你可能有很多问题需要担心今天的

从归一化模型转移到非规格化模型并不困难,如果遇到问题(例如归档旧数据),您可能还有其他选择来提高性能。