Mysql 帮助优化查询-运行需要15秒
我意识到这是一个相当大的问题,显然有很多事情要做。此查询的第二行(从第二行到最后一行)比较Mysql 帮助优化查询-运行需要15秒,mysql,query-optimization,Mysql,Query Optimization,我意识到这是一个相当大的问题,显然有很多事情要做。此查询的第二行(从第二行到最后一行)比较text字段的MD5散列。我尝试了这个方法,而不是比较这些值,但它根本没有减少查询执行时间 sob_数据中的字段可以通过sob_数据相互链接,此查询比较两个表单的值(每个表单在sob_数据中有517行),并提取不共享相同值的链接表单 SELECT sob_datas.id, sob_datas.sob_field_name
text
字段的MD5散列。我尝试了这个方法,而不是比较这些值,但它根本没有减少查询执行时间
sob_数据
中的字段可以通过sob_数据
相互链接,此查询比较两个表单的值(每个表单在sob_数据
中有517行),并提取不共享相同值的链接表单
SELECT
sob_datas.id,
sob_datas.sob_field_name
FROM sob_datas
WHERE sob_form_id = '.$formId.' AND
EXISTS(SELECT
sob_datas_to_links.id
FROM sob_datas_to_links
INNER JOIN sob_datas AS sub_sob_datas ON
sub_sob_datas.id = sob_datas_to_links.sob_datas_id
INNER JOIN sob_forms ON (
sob_forms.id = sub_sob_datas.sob_form_id AND
sob_forms.is_proof = 0 AND
sob_forms.archived IS NULL
)
WHERE sob_datas_to_links.link_id = (
SELECT
link_id
FROM sob_datas_to_links AS sub_sob_datas_to_links
WHERE sub_sob_datas_to_links.sob_datas_id = sob_datas.id
) AND
sub_sob_datas.sob_field_name = sob_datas.sob_field_name AND
sub_sob_datas.hash != sob_datas.hash
)
我的脑袋快要爆炸了(与这个问题无关,但与数据库有关),但我希望这能让你了解我的想法。尝试一个自连接(但不是这一个,我确信它不会像我现在这样工作,因为我现在无法尝试弄清楚您的表模式和所有那些jazz
SELECT DISTINCT sob_datas.id, sob_datas.sob_field_name
FROM sob_datas as A1
INNER JOIN sob_datas as A2
ON A1.sob_forms_ID = A2.sob_forms_ID
JOIN sob_forms
ON A1.sob_forms_ID = sob_forms.id
AND A2.sob_forms_ID = sob_forms.id
WHERE A1.hash != A2.hash
AND sob_forms.is_proof = 0
AND sob_forms.archived IS NULL;
我们也可以使用表定义吗?请删除子选择并使用联接。另外,如果适用,我希望
$formId
受到保护。我想不出如何使用联接来减少子查询。因此,请专注于减少回答您的问题时必须进行的猜测,根据您的查询重新创建表是非常必要的顺便说一句,您所需要做的就是为所使用的表粘贴showcreatetable的输出。
SELECT DISTINCT sob_datas.id, sob_datas.sob_field_name
FROM sob_datas as A1
INNER JOIN sob_datas as A2
ON A1.sob_forms_ID = A2.sob_forms_ID
JOIN sob_forms
ON A1.sob_forms_ID = sob_forms.id
AND A2.sob_forms_ID = sob_forms.id
WHERE A1.hash != A2.hash
AND sob_forms.is_proof = 0
AND sob_forms.archived IS NULL;