Mysql 统计数据,如大型记录集在网站中的显示

Mysql 统计数据,如大型记录集在网站中的显示,mysql,web,statistics,Mysql,Web,Statistics,我有4个数据库,其中表包含大量数据。我的要求是在UI(它是一个asp.net网站)中将鼠标悬停在相应的div上,显示这些表中所有记录的计数。请注意,计数可能每分钟或每小时发生变化。(意味着可以[使用另一个应用程序]从表中添加或删除新记录)。现在的问题是,获取计数需要很多时间(因为它有很多数据)。因此,每次鼠标移到上面,它都会调用相应的数据库并进行计数。有没有更好的方法来实现这一点 我正在考虑实施如下内容 但是要改变每秒的数据,我需要调用数据库。对吗?(获取最新计数)是否有更好的方法显示此类统计

我有4个数据库,其中表包含大量数据。我的要求是在UI(它是一个asp.net网站)中将鼠标悬停在相应的div上,显示这些表中所有记录的计数。请注意,计数可能每分钟或每小时发生变化。(意味着可以[使用另一个应用程序]从表中添加或删除新记录)。现在的问题是,获取计数需要很多时间(因为它有很多数据)。因此,每次鼠标移到上面,它都会调用相应的数据库并进行计数。有没有更好的方法来实现这一点

我正在考虑实施如下内容

但是要改变每秒的数据,我需要调用数据库。对吗?(获取最新计数)是否有更好的方法显示此类统计数据

顺便说一下,我正在使用MySQL


谢谢

您需要提供更多详细信息-您使用的是什么表引擎,您的计数查询是什么样子的,等等

但是假设您使用的是InnoDB,并且您正在尝试运行
count(*)
count(primary\u id\u column)
,那么您必须记住InnoDB具有集群主键,这些主键与行本身的数据页一起存储,而不是存储在单独的索引页中,因此计数将对行进行完全扫描

您可以尝试的一件事是在任何唯一列(如行的id等)上创建附加的、独立的、非主索引,并确保(使用explain查询语句)您的计数使用此索引


如果这对您不起作用,我建议您创建单独的表(例如,带有列:table_name,row_count)以在其中存储计数器,并在其他表上创建insert和delete时的触发器(您需要在中统计记录),以递增或递减这些值。根据我的经验(我们以每天和每小时的方式监控记录数,在记录数达数亿条且写负载很重的表上:~150次插入/秒),这是迄今为止我提出的最佳解决方案。

感谢您的回复。。我也考虑过触发器。但是它会影响数据库性能。rt?会的,但是简单的递增/递减不应该被注意到。你有多少次插入/更新?插入和更新是从另一个应用程序进行的..非常频繁..每分钟一次。我不知道你有什么硬件,但每分钟一次插入/更新并不那么频繁。正如我所写的,我们每秒大约有150次插入(设备跟踪系统),触发器工作得很好。如果您想快速了解行数信息,最好的解决方案是使用带计数器的单独表。