我正在一个网上商店工作,需要一些关于收集数据的最佳方法采取一些建议,以显示价格,免费送货和其他选项中涉及的数据库计数的过滤选项。我的脚本是在mySQL上用PHP编写的。
如果你查看亚马逊的产品类别(即http://www.amazon.com/gp/search/ref=sr_nr_scat_14219011_ln?rh=n%3A14219011%2Ck%3Awii&keywords=wii&ie=UTF8 ),你会看到左侧边栏上的过滤选项旁边是每个类别的结果数量。例如,任天堂有163个匹配项。
我不认为这是存储在一个表中,因为有太多的变量,你会不断更新数据库,但为每个过滤组运行一个查询,每个页面加载5-6个查询似乎也是不切实际的。
在缓存中检索一个大型数据集,使用PHP过滤结果,然后只显示几个结果,是不是更符合逻辑,或者可能有数千个项目的查询比运行几个辅助计数查询更糟糕?有没有其他的解决方案?
发布于 2011-05-22 13:17:36
SELECT COUNT(*) cnt, category FROM table WHERE category IN() GROUP BY category
发布于 2011-05-22 17:31:39
我不认为这是存储在一个表中,因为有太多的变量,你会不断更新数据库,但为每个过滤组运行一个查询,每个页面加载5-6个查询似乎也是不切实际的。
它实际上是实用的。如果您可以使用索引来达到小型数据集(几百个)上的SQL计数,那么它们的速度会非常快。(但请参阅下面的内容,因为不这样做确实更好。)
在缓存中检索一个大型数据集,使用PHP过滤结果,然后只显示几个结果,是不是更符合逻辑,或者可能有数千个项目的查询比运行几个辅助计数查询更糟糕?
这样做最终会比使用SQL慢。一旦整个缓存不再适合内存,您最终将求助于将其存储在磁盘或类似的东西上。在这一点上,您最终将以与在数据库中进行过滤的全表扫描一样的方式遍历缓存的数据。
还有其他解决方案吗?
是。它使用Memcache来避免重复查询:
http://php.net/manual/en/book.memcached.php
https://stackoverflow.com/questions/6086156
复制相似问题