Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql按时间间隔分组优化_Mysql_Sql_Database_Optimization_Indexing - Fatal编程技术网

Mysql按时间间隔分组优化

Mysql按时间间隔分组优化,mysql,sql,database,optimization,indexing,Mysql,Sql,Database,Optimization,Indexing,我有一个非常大的表(数亿行),它存储测试结果以及一个datetime和一个名为“link”的相关实体的外键,我需要按10、15、20、30和60分钟的时间间隔对行进行分组,并按时间和“link_id”进行筛选。我知道可以使用此查询完成此操作,如[here][1]所述: SELECT time,AVG(RTT),MIN(RTT),MAX(RTT),COUNT(*) FROM trace WHERE link_id=1 AND time>='2015-01-01' AND time <

我有一个非常大的表(数亿行),它存储测试结果以及一个datetime和一个名为“link”的相关实体的外键,我需要按10、15、20、30和60分钟的时间间隔对行进行分组,并按时间和“link_id”进行筛选。我知道可以使用此查询完成此操作,如[here][1]所述:

SELECT time,AVG(RTT),MIN(RTT),MAX(RTT),COUNT(*) FROM  trace
WHERE link_id=1 AND time>='2015-01-01' AND time <= '2015-01-30'
GROUP BY UNIX_TIMESTAMP(time) DIV 600;
成为:

id | time                     | rtt        | link_id | time_60                   |time_30 ...
1  | 2014-01-01 12:34:55.4034 | 154.3      | 2       | 2014-01-01 12:00:00.00    | 2014-01-01 12:30:00.00 ...
我通过以下查询得到时间间隔:

SELECT time_10,AVG(RTT),MIN(RTT),MAX(RTT),COUNT(*) FROM  trace
WHERE link_id=1 AND time>='2015-01-01' AND time <= '2015-01-30'
GROUP BY time_10;
这些是表索引:

+------------+------------+----------------------------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table      | Non_unique | Key_name                                           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------+------------+----------------------------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| main_trace |          0 | PRIMARY                                            |            1 | id          | A         |     2956718 |     NULL | NULL   |      | BTREE      |         |               |
| main_trace |          1 | main_trace_link_id_c6febb11f84677f_fk_main_link_id |            1 | link_id     | A         |           2 |     NULL | NULL   |      | BTREE      |         |               |
| main_trace |          1 | main_trace_07cc694b                                |            1 | time        | A         |     2956718 |     NULL | NULL   |      | BTREE      |         |               |
| main_trace |          1 | main_trace_e7549e3e                                |            1 | time_10     | A         |       22230 |     NULL | NULL   | YES  | BTREE      |         |               |
| main_trace |          1 | main_trace_01af8333                                |            1 | time_15     | A         |       14783 |     NULL | NULL   | YES  | BTREE      |         |               |
| main_trace |          1 | main_trace_1681ff94                                |            1 | time_20     | A         |       10870 |     NULL | NULL   | YES  | BTREE      |         |               |
| main_trace |          1 | main_trace_f7c28c93                                |            1 | time_30     | A         |        6399 |     NULL | NULL   | YES  | BTREE      |         |               |
| main_trace |          1 | main_trace_0f29fcc5                                |            1 | time_60     | A         |        3390 |     NULL | NULL   | YES  | BTREE      |         |               |
+------------+------------+----------------------------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
对于此查询:

SELECT time_10, AVG(RTT), MIN(RTT), MAX(RTT), COUNT(*)
FROM  trace
WHERE link_id = 1 AND time >= '2015-01-01' AND time <= '2015-01-30'
GROUP BY time_10;
选择时间\u 10、平均(RTT)、最小(RTT)、最大(RTT)、计数(*)
追踪
其中link_id=1,time>='2015-01-01'和time,用于此查询:

SELECT time_10, AVG(RTT), MIN(RTT), MAX(RTT), COUNT(*)
FROM  trace
WHERE link_id = 1 AND time >= '2015-01-01' AND time <= '2015-01-30'
GROUP BY time_10;
选择时间\u 10、平均(RTT)、最小(RTT)、最大(RTT)、计数(*)
追踪
其中link_id=1,time>='2015-01-01'和time,用于此查询:

SELECT time_10, AVG(RTT), MIN(RTT), MAX(RTT), COUNT(*)
FROM  trace
WHERE link_id = 1 AND time >= '2015-01-01' AND time <= '2015-01-30'
GROUP BY time_10;
选择时间\u 10、平均(RTT)、最小(RTT)、最大(RTT)、计数(*)
追踪
其中link_id=1,time>='2015-01-01'和time,用于此查询:

SELECT time_10, AVG(RTT), MIN(RTT), MAX(RTT), COUNT(*)
FROM  trace
WHERE link_id = 1 AND time >= '2015-01-01' AND time <= '2015-01-30'
GROUP BY time_10;
选择时间\u 10、平均(RTT)、最小(RTT)、最大(RTT)、计数(*)
追踪
其中,link_id=1和time>='2015-01-01'和time在(id,time)上的一个复合索引后跟一个潜在的
analyze table trace
将使其变得简洁

这只是一个建议,我不是说去做。分析表可能需要一些人几个小时才能运行数百万行

建议仅基于一个查询创建索引不是一个好主意。假设是这样,您还有其他查询。它们是一个拖拽式插入/更新。

在(id,时间)上的一个复合索引,后跟一个潜在的
分析表跟踪,这会使它很快

这只是一个建议,我不是说去做。分析表可能需要一些人几个小时才能运行数百万行

建议仅基于一个查询创建索引不是一个好主意。假设是这样,您还有其他查询。它们是一个拖拽式插入/更新。

在(id,时间)上的一个复合索引,后跟一个潜在的
分析表跟踪,这会使它很快

这只是一个建议,我不是说去做。分析表可能需要一些人几个小时才能运行数百万行

建议仅基于一个查询创建索引不是一个好主意。假设是这样,您还有其他查询。它们是一个拖拽式插入/更新。

在(id,时间)上的一个复合索引,后跟一个潜在的
分析表跟踪,这会使它很快

这只是一个建议,我不是说去做。分析表可能需要一些人几个小时才能运行数百万行

建议仅基于一个查询创建索引不是一个好主意。假设是这样,您还有其他查询。它们是拖拽式插入/更新。

time='2015-01-01'
时间<'2015-01-01'+间隔1个月
如果这是静态数据(例如一次写入的数据仓库),您可以通过构建和维护来加快查询速度。

time='2015-01-01'
时间<'2015-01-01'+间隔1个月
如果这是静态数据(例如一次写入的数据仓库),您可以通过构建和维护来加快查询速度。

time='2015-01-01'
时间<'2015-01-01'+间隔1个月
如果这是静态数据(例如一次写入的数据仓库),您可以通过构建和维护来加快查询速度。

time='2015-01-01'
时间<'2015-01-01'+间隔1个月

如果这是静态数据(例如一次写入的数据仓库),则可以通过构建和维护来加快查询速度。

为什么要在该索引中包含rtt?也。。。我应该为每个timex列创建这样的索引吗?我有时间10,时间15,时间20,时间30和时间_60@JesusGomez . . . 这使它成为查询的覆盖索引。整个查询可以使用索引。可能不需要转到数据页。就性能而言,是的。但是,我会尝试使用
跟踪(link\u id,time,rtt)
上的索引运行原始查询。也许您不需要额外的列。尝试了两种方法,首先我添加了一个跟踪(link\u id,time,rtt)并尝试了两种查询,但没有任何性能改进,然后我添加了覆盖索引跟踪(link\u id,time,time\u 10,rtt),查询只需2秒钟即可完成。我有点担心在一个表中有这么多索引的插入时间。@JesusGomez。索引中的列数对性能有(非常、非常小)影响。为什么要在该索引中包含rtt?也。。。我应该为每个timex列创建这样的索引吗?我有时间10,时间15,时间20,时间30和时间_60@JesusGomez . . . 这使它成为查询的覆盖索引。整个查询可以使用索引。可能不需要转到数据页。就性能而言,是的。但是,我会尝试使用
跟踪(link\u id,time,rtt)
上的索引运行原始查询。也许您不需要额外的列。尝试了两种方法,首先我添加了一个跟踪(link\u id,time,rtt)并尝试了两种查询,但没有任何性能改进,然后我添加了覆盖索引跟踪(link\u id,time,time\u 10,rtt),查询只需2秒钟即可完成。我有点担心在一个表中有这么多索引的插入时间。@JesusGomez。索引中的列数对性能有(非常、非常小)影响。为什么要在该索引中包含rtt?也。。。我应该为每个timex列创建这样的索引吗?我有时间10,时间15,时间20,时间30和时间_60@JesusGomez . . . 这使它成为查询的覆盖索引。整个查询可以使用索引。可能不需要转到数据页。就性能而言,是的。但是,我会尝试使用
跟踪(link\u id,time,rtt)
上的索引运行原始查询。也许您不需要额外的列。尝试了两种方法,首先我添加了一个跟踪(link_id,time,rtt),并尝试了两种查询,但没有任何性能改进,然后