查找MySQL表中是否存在匹配行的最有效方法

时间:2015-03-04 13:40:08

标签: mysql

我有两个MySQL表:

tableCollections:collection INT INDEX NOT NULL, item VARCHAR INDEX NOT NULL - 包含属于集合的项目。每个集合ID约1,000个项目。

tableData:item VARCHAR INDEX NOT NULL, itemAttr1 VARCHAR, itemAttr2 VARCHAR - 包含所有可能的项目及其数据。大约10,000件物品。

我想从tableData中选择集合中包含的所有项目。

我知道这样做的三种方式是使用子查询:

SELECT * FROM tableData
WHERE item IN (SELECT item from tableCollections WHERE collection = 3)

或使用左连接:

SELECT * FROM tableData
LEFT JOIN tableCollections USING (item)
WHERE tableCollections.collection = 3 AND tableCollections.item IS NOT NULL

或者使用内部联接(来自@ Phate01):

SELECT * FROM tableData
INNER JOIN tableCollections USING (item)
WHERE tableCollections.collection = 3

由于此查询将每隔几秒执行一次,我想使用效率最高的选项。有人知道其中一个可能比另一个更好,还是会针对同一个方面进行优化?

2 个答案:

答案 0 :(得分:0)

我尝试使用INNER JOIN

SELECT * FROM tableData
INNER JOIN tableCollections USING (item)
WHERE tableCollections.collection = 3 AND tableCollections.item IS NOT NULL

由于LEFT JOIN还包含不在集合编号3中的项目,然后过滤数据。

INNER JOIN只接受两个表中的记录,这样就可以处理更少的数据

答案 1 :(得分:-1)

这个必须更快:-)

SELECT * 
FROM tableCollections
LEFT JOIN tableData
USING (item)
WHERE tableCollections.collection = 3 AND tableCollections.item IS NOT NULL