我在offer_category
和product
表格中有一张表格。我想查询offer_categories
没有product
。在product
我170k rows
和offer_category
表3.6k
我的疑问:
SELECT offer_category.title,product.name,offer_category.id FROM
`offer_category` left join product on product.category_id =
offer_category.id where product.id is null
当我想运行它时,我的浏览器正在运行(我可以看到循环的圆圈)但是大约10分钟没有响应任何东西。
我该怎么做?
答案 0 :(得分:2)
您的查询似乎没问题:
select oc.title, p.name, oc.id
from `offer_category` oc left join
product p
on p.category_id = oc.id
where p.id is null;
(我只是用表别名重写它以使其更具可读性。)
问题似乎是性能(或与数据库的挂起连接)。要提高性能,您需要product(category_id, id)
上的索引:
create index product_category_id_id on product(category_id, id);
答案 1 :(得分:1)
SELECT *
FROM offer_category
WHERE NOT EXISTS (
SELECT product.category_id
FROM product
WHERE product.category_id = offer_category.category_id
)
答案 2 :(得分:1)
你的查询是正确的,所以我认为那里没有任何问题。我不会做后一个答案,因为它会对offer_category中的每一行进行选择。
您似乎只是通过网络提取大量数据,因此下载到浏览器需要很长时间。
尝试通过mysql workbench或类似的东西在服务器上运行它。
答案 3 :(得分:1)
两张桌子都有成千上万的记录,显然你需要等待一段时间。 在字段值下面的my.ini更改中尝试:
post_max_size = 750M
upload_max_filesize = 750M
max_execution_time = 5000
max_input_time = 5000
memory_limit = 1000M
或者尝试直接从mysql命令提示符运行此查询。这样会更好。
将索引应用于外键字段字段product.category_id和offer_category.category_id