【发布时间】:2014-08-14 18:50:34
【问题描述】:
我遇到了从 MySQL 数据库显示数据的问题。 我有一个表格,其中包含所有用户请求的格式:
| TIMESTAMP Time / +INDEX | Some other params |
我想在我的网站上将此数据显示为一个表格,其中包含每天的请求数。
查询很简单:
SELECT DATE(Time) as D, COUNT(*) as S FROM Stats GROUP BY D ORDER BY D DESC
但是在查看 EXPLAIN 时,这让我很生气:
Using index; **Using temporary; Using filesort**
根据 MySQL 文档,它说它会在硬盘驱动器上为此查询创建临时表。
1.000.000 条记录的速度有多快? 100.000.000 有多快?
有什么方法可以将 INDEX 放在函数的结果上? 也许我应该为 DATE 和 TIME 创建单独的列,而不是按 DATE 列分组? 处理此类问题的其他好方法是什么?缓存?另一个数据库引擎?
【问题讨论】:
-
视情况而定。而且,首先,“使用文件排序”并不意味着“磁盘”操作。它可能在内存中排序。确实 - 您可以创建两个单独的列(日期和时间或日期和日期时间,因此保留冗余数据以避免日期时间重建) - 但真正的改进将严格取决于结果索引基数。另外,检查的频率是多少?该表还有其他查询吗?
-
多久一次?我的第一个想法是“按需”执行此操作,因此每次用户访问“统计”页面时。只有 2 个查询:INSERT(针对每个请求)和 SELECT 来创建此数据。
标签: mysql sql performance