gpt4 book ai didi

mysql - 如何使用多个连接优化 MySQL 查询?

转载 作者:行者123 更新时间:2023-11-29 00:50:00 26 4
gpt4 key购买 nike

关于如何优化 MySQL 查询中的连接的任何输入?例如,考虑以下查询

    SELECT E.name, A.id1, B.id2, C.id3, D.id4, E.string_comment
FROM E
JOIN A ON E.name = A.name AND E.string_comment = A.string_comment
JOIN B ON E.name = B.name AND E.string_comment = B.string_comment
JOIN C ON E.name = C.name AND E.string_comment = C.string_comment
JOIN D ON E.name = D.name AND E.string_comment = D.string_comment

表 A、B、C、D 是临时表,包含 1096 行,表 E(也是临时表)包含 426 行。在没有创建任何索引的情况下,MySQL EXPLAIN 向我展示了从所有表中搜索的所有行。现在,我在所有表 A、B、C、B 和 E 上为名称创建了一个 FULLTEXT 索引作为 name_idx 和 string_comment 作为 string_idx。EXPLAIN 命令仍然给我相同的结果,如下所示。另外,请注意name 和 string_comment 是 VARCHAR 类型,idX 是 int(15) 类型

    id  select_type table  type  possible_keys         key  key_len  ref rows  Extra
1 SIMPLE A ALL name_idx,string_idx 1096
1 SIMPLE B ALL name_idx,string_idx 1096 Using where
1 SIMPLE C ALL name_idx,string_idx 1096 Using where
1 SIMPLE D ALL name_idx,string_idx 1096 Using where
1 SIMPLE E ALL name_idx,string_idx 426 Using where

关于如何调整此查询有任何意见吗?

谢谢。

最佳答案

对于每个表,您应该在两列上创建一个复合索引。语法略有不同,但大致如下:

CREATE INDEX comp_E_idx E(name, string_comment) 

然后对所有表重复。单独的索引无济于事,因为当它试图合并时它们是无用的。它在索引中搜索名称的速度非常快,但随后必须迭代才能找到评论

关于mysql - 如何使用多个连接优化 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949823/

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