假设我有2个表:
table1 :(20.000 records)
id code1 code2 something status
table2: (7.500 records)
id code1 code2 name
我想要的是使用此QUERY列出table1中的所有记录,其中包含table2中的“name”:
SELECT DISTINCT `tb1`.*, `tb2`.`name` FROM `table1` AS `tb1`
LEFT JOIN `table2` AS `tb2`
ON (tb1.code1 = tb2.code1 AND tb1.code2 = tb2.code2)
WHERE (tb1.status = 1)
但是我花了很长时间来检索数据(5分钟后我仍然无法看到结果)。
这样做的最佳方式是什么?
提前致谢..
答案 0 :(得分:3)
请尝试使用列(code1,code2,status)在table1上添加索引。如果table1中没有太多列,则也可以将它们添加到索引中。在MS SQL中,我们有“包含列”,我们可以将其添加到索引中。也许mysql有类似的东西。
使用列(code1,code2,name)在table2上添加索引。
如果您关心索引大小,那么只需保留index1的(code1,code2,status)和index2的(code1,code2)。
希望这会有所帮助。