假设我有两张桌子:

table1 :(20.000 records)
id    code1    code2   something    status

table2: (7.500 records)
id    code1    code2    name

我只需要使用以下查询列出表1中的所有记录以及表2中的“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分钟后我仍然看不到结果)。
最好的方法是什么?
提前谢谢..

最佳答案

请尝试使用列(code1,code2,status)在表1上添加索引。如果表1中没有太多列,也可以将它们添加到索引中。在ms sql中,我们有“include columns”可以添加到索引中。也许MySQL也有类似的东西。
使用列(code1,code2,name)在table2上添加索引。
如果您关心索引大小,那么只需为index1保留(code1,code2,status),为index2保留(code1,code2)。
希望这有帮助。

07-28 02:42