我有这样的查询
select count(distinct sessionKey) as tot from visits
但是现在执行48512 ms需要太多时间。
在几个月内,表中的数据将成为当前数据量的两倍。如何优化此查询
这是我的表结构
我有这样的查询
select count(distinct sessionKey) as tot from visits
但是现在执行48512 ms需要太多时间。
在几个月内,表中的数据将成为当前数据量的两倍。如何优化此查询
这是我的表结构
INDEX
在您的列中添加一个,SessionKey
它将提高其性能。
ALTER TABLE visits ADD INDEX (SessionKey)
就像其他人建议的那样,添加索引将是第一件也是最简单的事情。如果那里有成吨成吨的线路,那么无论如何都可能需要一些时间。
我曾经遇到过这样的问题,有人编写了一个系统,用户可以对新闻条目进行投票。每张选票都保存为数据库中的一行。在每个网页上都有一个“票数最高”的新闻列表。这基本上意味着有一个查询来选择完整的投票表,将它们相加,并在该总和之后进行排序。对于多个 100k 范围内的条目,这需要花费一些时间。我之前的某个人通过尝试“缓存”结果来“解决”它。这在大多数情况下都很好用,但是如果您已经清除了所有缓存,那么整个页面会混乱几个小时,直到再次构建缓存。然后我通过不将每张选票保存在自己的行中来修复它,而只是为每个条目保存总和。
我想告诉您的是:您可以尝试缓存(但结果当然是“实时”的),或者更改数据库中的某些内容,例如添加存储要读取的计数的字段或表您在每次插入访问表时进行更新。这会在插入时产生更多的负载,但获得这个数字会非常便宜。