gpt4 book ai didi

MySQL 查询执行时间较长

转载 作者:行者123 更新时间:2023-11-29 07:58:01 25 4
gpt4 key购买 nike

我编写了一个连接三个不同表的查询。各表的粗略描述如下:

Table 1: account_data
columns: id(pk), property_id(fk), account_id(fk), value, status
No Of Data: around 30 milions

Table 2: account
columns: id(pk), service_id(fk), status
No Of Data: around 5 milions

Table 3: property
columns: id(pk), create_analytics(index), status, uri
No Of Data: few hundreds

查询如下:

SELECT ad.value, p.uri, count(ad.id)
FROM account_data ad
INNER JOIN property p ON ad.property_id = p.id AND (p.status = 1)
INNER JOIN account ac ON ad.account_id = ac.id AND (ac.status = 1)
WHERE (p.create_analytics = '1' AND ac.service_id = ?) AND (ad.status = 1)
GROUP BY ad.property_id, ad.value

一开始查询花费的时间太长。在“create_analytics”列上创建索引后,它明显下降。

但是查询仍然花费太长时间(超过 3 分钟)。我尝试在按列分组(property_id 和值)上创建索引,在“状态”列上创建索引,但都没有显示出改进。

只是想知道,是否有其他方法可以重写此查询以使其更快?或者我是否错过了创建索引、更改顺序会有所帮助的任何内容?

期待您提出解决此问题的所有想法/建议。提前致谢。

最佳答案

此外,如果您当前的 create_analytics 目前是 VARCHAR ,请尝试将其更改为 CHAR ,或者更好的是,如果该字段中的字符串种类有限,请将其更改为 ENUM 。

Varchar 很灵活,可以节省未使用字符的空间,但 MySQL 必须工作看看是否有其他字段可以修复,以便 MySql 可以预先知道行的宽度。

确保你的所有连接都是同一类型,我猜你的 id 是 INT,确保你没有在某处混合 BIGINT。

最后,尝试将create_analytics移至JOIN部分,以便为WHERE子句提供较小的结果集。

关于MySQL 查询执行时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24590979/

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