我正在使用ASP.net开发一个网站,我的数据库是MYSQL。
用户可以为每个类别投放广告。我想显示该类别前面每个类别的广告数量。 像这样。
为了达到这个目的,我现在使用的代码类似于
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
这是我的解释结果
因此假设每个类别有200,000条记录。 那么考虑到性能和效率,我做的是正确的吗?
如果我为每个类别管理一个单独的商店计数表怎么办?如果用户为每个类别保存记录,我正在递增相应类型的值。假设有100,000个用户将立即发布记录。我的DB崩溃了吗?
或者有解决方案吗?
答案 0 :(得分:1)
首先使用查询开发应用程序。如果性能有问题,则在查询上创建索引以优化查询。如果索引不够,那么考虑分区。
不做的事情:
如果出于性能原因需要在单独的表中维护计数,则可能必须使用触发器维护它们。
答案 1 :(得分:0)
您可以使用任何缓存解决方案,可能在内存缓存中,例如 Redis 或 Memcached 。并将您的柜台存放在这里。在缓存初始化时,使用您的SQL脚本获取它们,稍后在添加或删除广告时更改此计数器。然后将它们存储在SQL中会更快。
但是你可能需要检查COUNT(*)在SQL数据库中是否真的很难操作。 SQL引擎很聪明,可能这个SELECT工作得足够快,或者你可以很好地优化它。如果它有效,在你遇到性能问题之前,你最好什么都不做!