当加入大表时,mysql有时会变慢

时间:2018-01-02 18:30:19

标签: php mysql indexing

我有一个大的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 个答案:

答案 0 :(得分:2)

连接大型数据集需要JOIN和WHERE子句的索引。

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

为了使连接有效运行,必须将以下字段定义为这些表的索引:

  • V.group_id
  • V.user_id
  • V.parent_group_id
  • U.group_id

要使查询高效运行,不应使用SELECT *(仅指定 所需的列),并且应优化查询

如果我们无法查看您的数据和代码,我们就无法提供帮助。

最终,您要求社区帮助您解决大型数据集上的MySQL性能问题,但不愿意或无法向我们展示任何表结构,完整查询或示例源数据和期望的输出。

只要我们失明,我们就无能为力。