寻找优化的MySQL查询

时间:2012-12-29 08:32:40

标签: mysql

我想构建一个在执行时应该优化性能的查询。 下面是我的表结构: -

表名: - 库存

表格结构: -

item_id int(50) Primary key,
item_name varchar(50),
matchingItemID int(50).

从上表中,我想找到匹配的项目对, 即如果A和B分别是item_id 1和2的两个项目,那么名为matchingItemID的字段中的值必须分别为2和1。

matchingItemID是添加项目的item_id。

例如

item_id     item_name      matchingItemID
   1            A                2
   2            B                1

因此,构建的查询应返回输出,如下所示: -

A - B。

我尝试了一个查询,但是执行需要时间,因此我认为它没有优化性能。

以下是我构建的查询: -

SELECT a.item_id, b.item_id
FROM inventory a, inventory b
WHERE a.matchingItemID = b.item_id
AND b.matchingItemID = a.item_id
AND a.item_id != b.item_id;

2 个答案:

答案 0 :(得分:0)

如果项目始终相互匹配,您可以执行以下操作:

SELECT a.item_id, b.item_id
FROM inventory a
JOIN inventory b ON a.matchingItemID = b.item_id

此外,您可以向matchingItemID列添加索引。

修改

似乎多余,但这就是你要求的:

SELECT a.item_id, b.item_id
FROM inventory a
JOIN inventory b ON a.matchingItemID = b.item_id AND b.matchingItemID = a.item_id

答案 1 :(得分:0)

如果您不需要拥有A=BB=A的两条记录,那么只需使用此查询,它只输出一对A=B而不是两条:

SELECT a.item_id id1, b.item_id id2
FROM inventory a
join inventory b on 
    (a.matchingItemID = b.item_id)
    AND 
    (b.matchingItemID = a.item_id)
    AND 
    (a.item_id < b.item_id)