gpt4 book ai didi

sql - 我怎样才能加快已经在使用索引的计数(*)? (MyISAM)

转载 作者:行者123 更新时间:2023-11-29 01:34:16 24 4
gpt4 key购买 nike

我有 3 个大表(10k、10k 和 100M 行),我试图对它们的连接进行简单计数,其中所有连接的列都已编入索引。为什么 COUNT(*) 需要这么长时间,我怎样才能加快它的速度(没有触发器和运行摘要)?

mysql> describe SELECT COUNT(*) FROM `metaward_alias` INNER JOIN `metaward_achiever` ON (`metaward_alias`.`id` = `metaward_achiever`.`alias_id`) INNER JOIN `metaward_award` ON (`metaward_achiever`.`award_id` = `metaward_award`.`id`) WHERE `metaward_award`.`owner_id` = 8;
+----+-------------+-------------------+--------+-------------------------------------------------------+----------------------------+---------+---------------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------+--------+-------------------------------------------------------+----------------------------+---------+---------------------------------+------+-------------+
| 1 | SIMPLE | metaward_award | ref | PRIMARY,metaward_award_owner_id | metaward_award_owner_id | 4 | const | 1552 | |
| 1 | SIMPLE | metaward_achiever | ref | metaward_achiever_award_id,metaward_achiever_alias_id | metaward_achiever_award_id | 4 | paul.metaward_award.id | 2498 | |
| 1 | SIMPLE | metaward_alias | eq_ref | PRIMARY | PRIMARY | 4 | paul.metaward_achiever.alias_id | 1 | Using index |
+----+-------------+-------------------+--------+-------------------------------------------------------+----------------------------+---------+---------------------------------+------+-------------+
3 rows in set (0.00 sec)

但实际上运行查询需要大约 10 分钟,而且我在 MyISAM 上,所以在这段时间内表被完全锁定

最佳答案

我想原因是您对三个表进行了巨大的连接(如果不首先应用 where 子句,结果将是 10k * 10k * 100M = 1016 行)。尝试重新排序连接(例如从 metaward_award 开始,然后仅连接 metaward_achiever 看看需要多长时间,然后尝试插入 metaward_alias,可能使用子查询以强制执行您首选的评估顺序)。

如果这没有帮助,您可能必须对数据进行非规范化,例如通过存储特定 metaward_achiever 的别名数量。然后你会完全摆脱一个加入。也许您甚至可以缓存 metaward_award 的总和,具体取决于数据更新的方式和频率。

其他可能有帮助的事情是将所有数据库内容放入 RAM :-)

关于sql - 我怎样才能加快已经在使用索引的计数(*)? (MyISAM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437080/

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