我试过很多答案,但没有一个对我有用。
Find records where join doesn't exist
Select * from table1 that does not exist in table2 with conditional
我有两张桌子。1是一个项目表,大约有50000个项目。第二个是超过100000行的评级表。我想得到所有没有投票权的项目。
我试过下面的方法,它似乎是有效的,但它似乎冻结了,可能是因为它必须检查这么多记录。有没有更有效的方法让我做到这一点。
从items LEFT JOIN itemsvots ON items.id中选择标题=
itemTovots.itemid,其中itemTovots.vote为空
我相信这个查询最终会返回结果,但我需要这是一个快速的事情,可以从一个php网页检查,所以它需要在几秒钟内加载。
只是确认一下。上面的查询花了3分钟才返回结果。这是有效的,但太慢了。

最佳答案

子查询可能更快:

SELECT title FROM items
WHERE id NOT IN (
    SELECT itemid
    FROM itemvotes
)

当您执行外部连接时,它首先连接,然后搜索,因此它搜索50000*100000行。如果你做了一个子查询,它正在寻找最大的50000 + 100000。当然,还必须确保两个表上都有正确的索引。

08-25 18:10
查看更多