【发布时间】:2015-09-20 23:56:34
【问题描述】:
我的问题是 150 万个数据集的连接查询大约需要 7-15 秒,我想显着减少它,但不知道如何。
我有一个设计如下的数据库:
Tbl1:ID - Time1 - Time 2 - Time2
Tbl2:ID - Topic_ID
Tbl3:ID - Location_ID
Tbl4:ID - Status_ID
第一个 ID 始终相同,并且两个列上始终有键。加入 2 个表很容易,但只要我尝试加入第 3 个表,例如:
Select t1.Time1,t2.Topic_ID,t3_Location_id
from
(select ID,Time1 from tbl1 where time > 400 and < 500 ) as t1
inner join tbl2 as t2 on t2.Id = t1.ID
inner join tbl3 as t3 on t2.id = t3.ID
where t2.topic_ID = 2
时间从 0.02 秒大幅增长到 7-15 秒。
我现在的问题是,除了表 2 之外的所有表都存在 1:1 关系,其中一个 Id 可能有多个主题。
我希望我能体面地解释我的问题。
非常感谢您的帮助
【问题讨论】:
-
所有ID列都被索引了吗? t2.topic 呢?
-
是索引无处不在
-
如果是 Oracle,我建议检查表的统计信息是否是最新的。你能为mysql做同样的事情吗? dev.mysql.com/doc/innodb/1.1/en/…数据量如何?
-
时间表大约是 250 mb,其余的大约是每个 80 mb
-
我应该补充一点,我的 ID 是 16 个字符的 variableChar
标签: mysql sql join inner-join