Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 uping,返回了多少行?位置、步骤有多少种不同的组合?@Scrum-有固定数量的7个位置,通常不超过10-15个唯一的步骤值。一个典型的查询是在七天的时间内每天返回唯一的位置+步骤结果。因此,这将是7天x 7个位置x 10个步骤=分组后返回的490行。排_Mysql_Database Design_Optimization_Query Optimization - Fatal编程技术网

Mysql uping,返回了多少行?位置、步骤有多少种不同的组合?@Scrum-有固定数量的7个位置,通常不超过10-15个唯一的步骤值。一个典型的查询是在七天的时间内每天返回唯一的位置+步骤结果。因此,这将是7天x 7个位置x 10个步骤=分组后返回的490行。排

Mysql uping,返回了多少行?位置、步骤有多少种不同的组合?@Scrum-有固定数量的7个位置,通常不超过10-15个唯一的步骤值。一个典型的查询是在七天的时间内每天返回唯一的位置+步骤结果。因此,这将是7天x 7个位置x 10个步骤=分组后返回的490行。排,mysql,database-design,optimization,query-optimization,Mysql,Database Design,Optimization,Query Optimization,uping,返回了多少行?位置、步骤有多少种不同的组合?@Scrum-有固定数量的7个位置,通常不超过10-15个唯一的步骤值。一个典型的查询是在七天的时间内每天返回唯一的位置+步骤结果。因此,这将是7天x 7个位置x 10个步骤=分组后返回的490行。排序在分组后应用。因此,没有理由在start之后添加location。另外,我指出,在范围类型条件之后不会使用复合索引部分。我在一个包含200K个条目的表上添加了此索引,并且解释计划对于此查询和我的原始查询看起来相同。这是否意味着它们相等,或者解


uping,返回了多少行?位置、步骤有多少种不同的组合?@Scrum-有固定数量的7个位置,通常不超过10-15个唯一的步骤值。一个典型的查询是在七天的时间内每天返回唯一的位置+步骤结果。因此,这将是7天x 7个位置x 10个步骤=分组后返回的490行。排序在分组后应用。因此,没有理由在
start
之后添加
location
。另外,我指出,在范围类型条件之后不会使用复合索引部分。我在一个包含200K个条目的表上添加了此索引,并且解释计划对于此查询和我的原始查询看起来相同。这是否意味着它们相等,或者解释计划中没有描述其他优化?@Patrick如果删除AVG(Foo)列会怎么样?(因为在你的问题中Foo不在解释表输出中,所以我忽略了它)@Scrum-相同的解释计划:使用新索引,键入“range”,17970行,以及“使用where;使用临时设备;使用filesort的附加项。实际返回的行数是98(7个位置,2个步骤,7天)。@zerkms您是不正确的,因为从WHERE子句中删除起始范围没有帮助。我考虑过使用date_格式,但我真的没有任何好的理由说明为什么它会显著改变情况。你能告诉我为什么你认为这会有帮助吗?你所做的将在
开始时使用3个函数,这种方法只使用一个函数并返回相同的结果。我不相信函数调用是我的主要性能瓶颈。我试图实现的是优化组,使其只使用索引,而不需要使用大得多的数据集创建临时表。按5个字段分组与按3个字段分组相比,有什么能更好地提高性能?在索引旁边,您可以考虑有一个列:“代码>启动日期日期< /COD>,它是从列开始派生的日期,并在中更改范围为<代码>,在<代码> JOBID、开始、位置、步骤< /代码>上构建复合索引,就像@ ZelkMS建议的那样。
SELECT location, step, COUNT(*), AVG(foo), YEAR(start), MONTH(start), DAY(start)
FROM table WHERE jobid = 'xxx' AND start BETWEEEN '2010-01-01' AND '2010-01-08'
GROUP BY location, step, YEAR(start), MONTH(start), DAY(start)
step 0 PRIMARY 1 step_id A 16 NULL NULL BTREE step 1 start 1 start A 16 NULL NULL BTREE step 1 step 1 step A 2 NULL NULL BTREE step 1 foo 1 foo A 16 NULL NULL YES BTREE step 1 location 1 location A 2 NULL NULL YES BTREE step 1 jobid 1 jobid A 2 NULL NULL YES BTREE CREATE TABLE `step` ( `start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `step` smallint(2) unsigned NOT NULL, `step_id` int(8) unsigned NOT NULL AUTO_INCREMENT, `location` varchar(12) DEFAULT NULL, `jobid` varchar(37) DEFAULT NULL, PRIMARY KEY (`step_id`), KEY `start_time` (`start`), KEY `step` (`step`), KEY `location` (`location`), KEY `job_id` (`jobid`) ) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8
SELECT location, step, COUNT(*), AVG(foo), YEAR(start), MONTH(start), DAY(start)
FROM table WHERE jobid = 'xxx' AND start BETWEEEN '2010-01-01' AND '2010-01-08'
GROUP BY YEAR(start), MONTH(start), DAY(start), location, step
ORDER BY location, step, YEAR(start), MONTH(start), DAY(start)
GROUP BY location, step, YEAR(start), MONTH(start), DAY(start)
ORDER BY location, step, YEAR(start), MONTH(start), DAY(start)
GROUP BY location, step, date_format(start, '%Y%m%d')
ORDER BY location, step, date_format(start, '%Y%m%d')