Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Performance - Fatal编程技术网

Mysql 提高一对多联接的性能

Mysql 提高一对多联接的性能,mysql,performance,Mysql,Performance,我们正在构建一个模型,在这个模型中,我们加入了一个由13部分组成的概要文件01_01_资源利用率(resource)(usage)(usage)(usage)(usion);这是一个深思熟虑的一对多,增加了表的大小 这是一个简单的查询,但我们尝试了索引,但优化此查询的最佳方法是什么 SELECT a.DATE, a.RUN_ID, a.HOURS, a.HOURS * b.RESOURCE_DISTRIBUTION, a.SCHEDULE_PROFILE_ID, a.WEEKDAY_NUMBER

我们正在构建一个模型,在这个模型中,我们加入了一个由13部分组成的概要文件01_01_资源利用率(resource)(usage)(usage)(usage)(usion);这是一个深思熟虑的一对多,增加了表的大小

这是一个简单的查询,但我们尝试了索引,但优化此查询的最佳方法是什么

SELECT
a.DATE,
a.RUN_ID,
a.HOURS,
a.HOURS * b.RESOURCE_DISTRIBUTION,
a.SCHEDULE_PROFILE_ID,
a.WEEKDAY_NUMBER,
a.SCHEDULE_DISTRIBUTION,
b.RESOURCE_DISTRIBUTION,
a.LOCATION_DESC,
a.DEPARTMENT_DESC,
a.LANGUAGE_DESC,
a.JOB_TITLE_DESC,

FROM
03_01_schedule a
LEFT JOIN 01_01_resource_utilization_prepared b ON (
    a.RESOURCE_PROFILE_ID = b.RESOURCE_PROFILE_ID
    AND a.DATE >= b.EFFECTIVE_FROM
    AND a.DATE <= b.EFFECTIVE_TO
)

如果没有更多的信息,我不能确切地说,但是性能将取决于您正在比较的列。如果没有索引,连接可能必须扫描每一行,一个

在MySQL中,很常见的情况是忘记使用。03_01_schedule.RESOURCE_PROFILE_ID和01_01_RESOURCE_use_prepared.RESOURCE_PROFILE_ID应声明为外键,并将它们编入索引。这将使基本连接更快,并且还提供引用完整性

03_01_计划日期、01_01_资源利用率_编制日期、生效日期和01_01_资源利用率_编制日期、生效日期均应编制索引。这将使使用这些列进行比较的速度更快。

01\u 01指的是1月1日吗?如果是这样,我认为这是一种不好的数据布局方式。但与此同时

如果范围来自另一个表,则很难对其进行优化。b上的这些综合指数会有一些帮助:

INDEX(RESOURCE_PROFILE_ID, EFFECTIVE_FROM)
INDEX(RESOURCE_PROFILE_ID, EFFECTIVE_TO)
还需要什么?如果可以在不破坏语义的情况下删除它,那么就可以使用更好的选项。删除左侧将使其在以下情况下有用:


同时,我不理解你在第一段中所说的任何话的相关性。

嗨,欢迎来到StackOverflow。我们需要帮助一些重要的信息。所涉及的表的架构,请为查询中的每个表提供的输出。这将向我们展示类型和索引内容,这是性能的关键。这也将有助于了解情况。最后,向我们展示一个输入和输出的示例。如果索引不存在,FK会隐式创建索引。因为FK意味着要检查的约束,所以即使假设索引存在,它实际上也会稍微减慢代码的速度。INDEXa,INDEXb与INDEXa,b不同。在很多情况下,包括这一个,复合键更好。@RickJames是的,我对FKs和索引的措辞很糟糕。我会解决的。至于具体的索引,没有更多的信息就很难知道。
INDEX(RESOURCE_PROFILE_ID, `DATE`)