我应该使用Count(*)还是使用单独的计数表来计算每个类别的记录?还是其他什么?

时间:2015-01-14 03:33:51

标签: mysql asp.net

我正在使用ASP.net开发一个网站,我的数据库是MYSQL。

用户可以为每个类别投放广告。我想显示该类别前面每个类别的广告数量。 像这样。

enter image description here

为了达到这个目的,我现在使用的代码类似于

SELECT b.name, COUNT(*) AS count
FROM `vehicle_cat` a
    INNER JOIN `vehicle_type` b
    ON a.`type_id_ref` = b.`vehicle_type_id`
GROUP BY b.name

这是我的解释结果

enter image description here

因此假设每个类别有200,000条记录。 那么考虑到性能和效率,我做的是正确的吗?

如果我为每个类别管理一个单独的商店计数表怎么办?如果用户为每个类别保存记录,我正在递增相应类型的值。假设有100,000个用户将立即发布记录。我的DB崩溃了吗?

或者有解决方案吗?

2 个答案:

答案 0 :(得分:1)

首先使用查询开发应用程序。如果性能有问题,则在查询上创建索引以优化查询。如果索引不够,那么考虑分区。

不做的事情:

  • 不要为每个类别创建单独的表格。
  • 在遇到性能问题之前,请不要专注于性能。做一些合理的事情,但要先让功能发挥作用。

如果出于性能原因需要在单独的表中维护计数,则可能必须使用触发器维护它们。

答案 1 :(得分:0)

您可以使用任何缓存解决方案,可能在内存缓存中,例如 Redis Memcached 。并将您的柜台存放在这里。在缓存初始化时,使用您的SQL脚本获取它们,稍后在添加或删除广告时更改此计数器。然后将它们存储在SQL中会更快。

但是你可能需要检查COUNT(*)在SQL数据库中是否真的很难操作。 SQL引擎很聪明,可能这个SELECT工作得足够快,或者你可以很好地优化它。如果它有效,在你遇到性能问题之前,你最好什么都不做!