查找和删除类别没有产品

时间:2014-03-24 12:42:32

标签: mysql

我在offer_categoryproduct表格中有一张表格。我想查询offer_categories没有product。在product170k rowsoffer_category3.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分钟没有响应任何东西。

我该怎么做?

4 个答案:

答案 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