gpt4 book ai didi

MySQL 非常长的查询

转载 作者:行者123 更新时间:2023-11-29 21:52:27 25 4
gpt4 key购买 nike

我有一个相当大的数据库(800+Mb 转储文件),已导入到本地服务器。它是来自女巫的 WordPress 数据库,我需要提取某些帖子。里面有大约160000个帖子。

目前,我正在使用 MySql Workbench 进行一些测试,使用 JOIN 运行简单的查询,这需要大量时间,实际上时间太长,以至于 Workbench 停止处理。

这是一个例子:

SELECT 
COUNT(*)
FROM wp_posts
LEFT JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_id
LEFT JOIN wp_term_taxonomy
ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
LEFT JOIN wp_terms
ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE wp_terms.term_id = 195;

运行超过 600 秒。这是一个 WordPress 数据库架构: enter image description here

当然有可能我只是不擅长 SQL,而不是我的领域......

最佳答案

如果您在用于连接的列上有所有索引(wp_posts.ID、wp_term_relationships.object_id 等),这应该不是问题,并且查询应该在不到 1 秒的时间内执行(1 秒已经很多了,也)。

此外,队列中可能正在等待其他查询(锁),因此您应该将其添加到这些查询中:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

SELECT
COUNT(*)
FROM
wp_posts
LEFT JOIN
wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
LEFT JOIN
wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
LEFT JOIN
wp_terms ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE
wp_terms.term_id = 195;

COMMIT ;

在工作台中创建索引。我可以在这里看到您正在连接每个表上的 ID,因此因为这些是 ID 列,所以它们应该是主键,并在它们上创建唯一聚集索引。

关于MySQL 非常长的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com