我有这么大的 User
有100多万行的表。奇怪的是,它通常会查询大多数用户的数据,但在查询某些用户的数据时,却总是需要30秒。它不会随机发生,但总是在特定的用户身上发生。
查询如下:
SELECT * FROM visit V
INNER JOIN group G ON G.id = V.group_id
INNER JOIN user U ON U.id = V.user_id AND U.group_id = V.parent_group_id
WHERE V.id = xxx AND V.group_id = xxx
但如果我去掉 JOIN
对于表用户,查询再次正常。
有人知道怎么解决这个问题吗?
(查询已缩小,实际查询很长,还需要保密)
1条答案
按热度按时间yeotifhr1#
连接大型数据集需要连接和where子句上的索引。
要使联接高效运行,必须将以下字段定义为这些表的索引:
V.group_id
V.user_id
V.parent_group_idU.group_id
为了使查询高效地运行,它不应该使用SELECT *
(仅指定所需的列),并且应该优化查询如果看不到你的数据和代码,我们就无能为力。
最终,您要求社区帮助您解决大型数据集上的mysql性能问题,但不愿意或无法向我们显示任何表结构、完整查询或示例源数据以及所需的输出。
只要我们瞎飞,我们就无能为力。