代码之家  ›  专栏  ›  技术社区  ›  rap-2-h

两个MySQL表上的内部联接超时

  •  0
  • rap-2-h  · 技术社区  · 7 年前

    CREATE TABLE `ps_product_access` (
      `id_order` int(10) UNSIGNED NOT NULL DEFAULT '0',
      `id_product_access` int(10) UNSIGNED NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    ALTER TABLE `ps_product_access`
      ADD KEY `id_order` (`id_order`);
    
    CREATE TABLE `ps_orders` (
      `id_order` int(10) UNSIGNED NOT NULL,
      `id_order_renew` int(10) UNSIGNED NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    ALTER TABLE `ps_orders`
      ADD PRIMARY KEY (`id_order`)
      ADD KEY `ps_orders__id_order_renew__index` (`id_order_renew`);
    

    表格过于简化,仅包含相关字段。没有外键,但我现在无法添加外键(此数据库中的数据不一致)。

    此查询不起作用(这意味着它是一个无限加载):

    SELECT pa.`id_product_access`
    FROM `ps_product_access` pa
    INNER JOIN `ps_orders` o ON pa.id_order = o.id_order_renew;
    

    我不明白为什么?这看起来很简单,只是一个内部连接。我知道我可以使用优化查询 WHERE EXISTS 但这不是主要问题。由于几乎没有数据(50k行),因此此查询不应无限加载。我错过什么了吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joakim Danielson    7 年前

    专栏 id_order 在里面 ps_product_access 默认值为0,可能需要检查有多少行 身份证 = 0