mysql - 慢速三重内部连接

标签 mysql inner-join

我有以下查询(名称已更改),它真的很慢。我不知道它这么慢是因为它可以写得更好还是因为我缺少索引。另外,我应该如何创建索引,因为大多数连接都在虚构的表上?

select y.radish, g.enton
from great g 
inner join(
    select sr.radish, sr.greatReferenceID
    from spaceRadish sr
    inner join(
        select s.id
        from super s
        inner join experiments e
        on s.CID = e.analysis) x
    on sr.springID = x.id) y
on g.id = y.greatReferenceID

解释选择的输出:

'1', 'PRIMARY', '<derived2>', 'ALL', NULL, NULL, NULL, NULL, '14085960', ''
'1', 'PRIMARY', 'g', 'eq_ref', 'PRIMARY', 'PRIMARY', '4', 'y.greatReferenceID', '1', ''
'2', 'DERIVED', '<derived3>', 'ALL', NULL, NULL, NULL, NULL, '287', ''
'2', 'DERIVED', 'sr', 'ref', 'springID', 'springID', '4', 'x.id', '831666', ''
'3', 'DERIVED', 'e', 'ALL', NULL, NULL, NULL, NULL, '3271', ''
'3', 'DERIVED', 's', 'ref', 'CID,CID_2', 'CID', '767', 'cpp.e.analysis', '16', 'Using where; Using index'

最佳答案

尽量避免子查询

    select y.radish, g.enton
    from great g 
    inner join spaceRadish sr ON  sr.greatReferenceID = g.id
    inner join super s  s.id = sr.springID
    inner join experiments e on s.CID = e.analysis 

并确保你在

上有正确的索引
    table  great  composite index on (id, enton)
    table spaceRadish composite index on (greatReferenceID, springID)
    table super cmposite index on (id, cid)
    table experiments index  on analysis

关于mysql - 慢速三重内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872591/

相关文章:

mysql - sql查询中使用Max(date)聚合函数时返回所有列中包含Null值的行

mysql - 在Mysql中查找max distinct

mysql - 使用来自另一个数据库的数据更新来自一个数据库的表

mysql - 如何使用mysql在距离搜索中将表与内连接联合起来

mysql - 使用连接池处理事件记录超时的正确方法是什么?

sql - 从 SQL 中的 select 语句中提取多个值

mysql - 多条SQL连接困难查询

MySql if 条件替换

php - 从不同的列中选择多个值

MySQL 嵌入式 SELECT 与 JOIN