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