繁体   English   中英

MySQL查询优化的非重复计数

[英]Mysql query optimization for Distinct count

我有这样的查询

select count(distinct sessionKey) as tot from visits

但是执行48512 ms现在需要太多时间。
在几个月内,表中的数据将变为当前数据量的两倍。如何优化此查询

这是我的表结构

在此处输入图片说明

在您的列SessionKey添加一个INDEX ,它将提高其性能。

ALTER TABLE visits ADD INDEX (SessionKey)

就像其他人建议的那样,添加索引将是第一件事,也是最简单的事情。 如果那里有成千上万的线路,那么无论如何都要经过所有的线路。

我曾经遇到过这样的问题,曾经有人编码了一个系统,使用户可以对新闻条目进行投票。 每个表决都保存为数据库中的一行。 在每个网页上都有“最高投票”新闻列表。 从根本上讲,这意味着需要进行查询以选择完整的投票表,对其进行汇总,然后对总和进行排序。 由于条目数在100k范围内,这花费了一些时间。 我之前有人试图通过“缓存”结果来“解决”它。 在大多数情况下,这种方法都很有效,但是,如果您清理了所有缓存,那么整个页面就会混乱几个小时,直到再次建立缓存为止。 然后,我通过不将所有表决结果保存在自己的行中而是仅对每个条目求和来解决此问题。

我想用这个告诉你的是:您可以尝试缓存(但是结果当然不是“实时的”),或者更改数据库中的某些内容,例如添加一个字段或表来存储要读取的计数。您会更新访问表中的每个插入内容。 这会在插入上产生更多的负载,但是获得该数量将非常便宜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM