2012-07-30 67 views
4

下面是我要从当前项目的产品页面的MySQL数据库中提取的数据的描述。产品数据来自product表,变量名称(颜色,大小等)来自名为product_option_group的表格,这些变量的实际值(红色,绿色,蓝色或小型,中型,大型等)。 )在product_option表中,并且与该产品相关的产品照片在product_photo中。我应该走多远才能最小化数据库查询?

我很可能使用JOIN -s来创建一个查询,我会再需要foreach地狱出来,使有用的,它返回了这一切(产品,变量值,照片)单个查询。我的问题是这是否有意义。我应该在多大程度上尽量减少查询?

对于产品列表,我使用单个查询来获取少量产品数据和第一张产品照片的网址。但在显示单个产品的页面上,我对最佳方法有点不确定。看起来像我写一个疯狂的长MySQL查询的一种方式,然后做了很多PHP解析。另一种方式是我正在进行一些数据库调用。

哪个最好?

+0

当你考虑到每个mysql调用需要x的时间来联系mysql服务器,处理数据并返回它,然后外推a)循环和b)站点流量......是的,保持mysql查询最低限度。某些框架可以帮助你完成这个任务(例如fuelphp)。 – Matt 2012-07-30 14:50:12

+0

请显示代码。 – 2012-07-30 14:53:59

+0

'foreach' = 100纳秒**纳秒**秒到几微秒。 DB查询的延迟时间= 20到200毫秒**(通常 - 如果你在庞大的数据集上做复杂的事情,可能是秒,分钟,小时)。访问数据库通常至少需要3-4次网络往返时间(如果没有连接,再加上3次)加上至少1-2次搜索时间(除非数据集足够小以适应内存,通常不会),再加上等待锁,以及实际传输和处理查询和数据所需的任何内容。你不能摆脱后者,但你可以剥夺前者。 – Damon 2012-07-30 15:11:01

回答

5

我总是被教导(并与之合作)的假设,你应该只在需要时进行优化,而不是尝试优化不会造成问题的事情。

所以,就你的情况来说,把你得到的东西通过磨机运行 - 在它上面加载负载,看看它是如何处理它的。如果速度很慢,那么考虑是否要尝试合并为一个查询,或者添加一个或两个索引,或者您可能会采取哪些措施来加快速度。问问你自己是否数据库缓慢返回,或者两者之间的流量是否存在问题,或者PHP的处理速度不够快。

花时间在需要的地方,并记住保持简单。

+0

谢谢Ametren。你重新肯定了我的感受。如果事情一旦我装载了测试数据并以一些流量点击它,我就会看得更近。同时,我要和KISS一起去。 – 2012-07-30 16:14:01

+0

@StevenSokulski当谈到db的“KISS”大致转换为“Normalize直到它受到伤害,非规范化直到它工作。” – Sharky 2014-12-03 11:20:09

3

最好减少每页加载的查询次数。

但是,数据库服务器擅长处理许多小型查询。很多CMS的数百查询每页加载

所以,总是尝试优化,但不要发疯。

+0

谢谢丹。看起来你像ametren一样回应同样的感受。目前,这款购物车适用于一个小型网站,每天处理1或2个订单,所以我不会失去任何超出规模的睡眠。谢谢! – 2012-07-30 16:13:16