Php MySQL是从表1中选择不存在联接的行的有效方法
我尝试了很多答案,但没有一个对我有用 我有两张桌子。1是一个包含大约50000个项目的项目表。第二个是超过100000行的评级表。我想得到所有没有投票权的项目 我尝试了以下方法,它似乎是有效的,但似乎冻结了,可能是因为它必须检查这么多记录。有没有更有效的方法让我实现这一目标 从items LEFT中选择标题JOIN itemvotes ON items.id= itemvotes.itemid,其中itemvotes.vote为空 我确信这个查询最终会返回结果,但我需要这是一个快速的东西,可以从php网页检查,所以它需要在几秒钟内加载Php MySQL是从表1中选择不存在联接的行的有效方法,php,mysql,Php,Mysql,我尝试了很多答案,但没有一个对我有用 我有两张桌子。1是一个包含大约50000个项目的项目表。第二个是超过100000行的评级表。我想得到所有没有投票权的项目 我尝试了以下方法,它似乎是有效的,但似乎冻结了,可能是因为它必须检查这么多记录。有没有更有效的方法让我实现这一目标 从items LEFT中选择标题JOIN itemvotes ON items.id= itemvotes.itemid,其中itemvotes.vote为空 我确信这个查询最终会返回结果,但我需要这是一个快速的东西,可
我只是想确认一下。上面的查询返回结果花费了3分钟以上。它是有效的,但太慢了。子查询可能会更快:
SELECT title FROM items
WHERE id NOT IN (
SELECT itemid
FROM itemvotes
)
当您执行外部联接时,它首先联接然后搜索,因此它搜索50000*100000行。如果您执行子查询,它的最大值为50000+100000。当然,您还必须确保在两个表上都有适当的索引。为什么不使用以下内容:
SELECT * FROM `table1` WHERE `id` NOT IN SELECT `table1_id` FROM `table2`
表1\u id当然是外键。能否提供
项目
和项目投票
的表定义?特别是包括标记。