gpt4 book ai didi

mysql - 查询时间呈指数增长?

转载 作者:行者123 更新时间:2023-11-30 23:09:47 29 4
gpt4 key购买 nike

在过去的几天里,我一直致力于规范我们的 600GB 数据库。我已将所有冗余数据分解为 4 个单独的表和一个主条目表。

到目前为止一切都很好,但最后一步,将新表与旧数据记录连接起来,并将新的规范化数据记录插入数据库。为此,我正在使用 "INSERT INTO SELECT"。但不是问题。如果我在前 100 个 ID 上运行此查询需要 10 秒,但如果我在前 300 行上运行它需要几分钟。我该怎么做才能解决这个问题?

SELECT * FROM oldDB.`unNormalized` 
INNER JOIN `new_normalized_db`.`keyword` k ON `unNormalized_tabel`.`keyword` = k.`keyword`
INNER JOIN `new_normalized_db`.`project` p ON `unNormalized_tabel`.`awrProject` = p.`project`
INNER JOIN `new_normalized_db`.`searchEngine` s ON `unNormalized_tabel`.`searchEngine` = s.`searchEngine`
INNER JOIN `new_normalized_db`.`urlHash` u ON MD5(`unNormalized_tabel`.`url`) = u.`hash`
WHERE oldDB.`unNormalized_tabel`.`id` < 100
GROUP BY k.`id`, p.`id`, s.`id`,u.`id`

目前旧条目只有主键索引,我是否应该为所有旧数据列添加全文索引?我认为在 600 GB 的非规范化数据库上这可能需要几个月的时间?那么空间呢 4 个新索引占用了多少额外空间?

 id  select_type  table              type    possible_keys                                                    key           key_len  ref                                 rows  Extra                                         
------ ----------- ----------------- ------ --------------------------------------------------------------- ------------ ------- -------------------------------- ------ ----------------------------------------------
1 SIMPLE p index (NULL) projectName 42 (NULL) 427 Using index; Using temporary; Using filesort
1 SIMPLE unormalized_tabel range PRIMARY,keyword_url_insDate,keyword,searchEngine,url,awrProject PRIMARY 4 (NULL) 358 Using where; Using join buffer
1 SIMPLE u ref url url 767 oldDB.unormalized_tabel.url 1
1 SIMPLE k index (NULL) keyword 42 (NULL) 107340 Using where; Using index; Using join buffer
1 SIMPLE s index (NULL) searchEngine 42 (NULL) 1155 Using where; Using index; Using join buffer

最佳答案

您可以通过添加索引来加快查询速度。

如果 keyword 上有索引,unNormalized_tabel.keyword 上也有索引,则 k 的第一个连接可以更快项目 pawrProjectp.projects.searchEngineunNormalized_tabel.searchEngine

但是最后一个连接无论如何都会很慢,因为必须在查询时计算哈希,这在很多数据上非常慢。您可以做的是在插入 unNormalized_tabel 之前散列 url,然后在 hash_field 上添加索引。

关于mysql - 查询时间呈指数增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20325559/

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