我的查询:
SELECT source.name, file_info.*
from FILE_INFO
JOIN source
ON source.id = file_info.source_ID
where file_info.source_ID in
(select ID from Source where name like 'Donatello.%');
我的表:
FILE_INFO
FILE_NAME | FILE_ID | SOURCE_ID | DATE_SEEN | CURRENT_STATUS
SOURCE
NAME | ID | CATEGORY
背景
在我的数据库中,文件与提供它们的源相关联。每个文件都有一个FILE_ID,每个源都有一个ID(与表FILE_INFO中的SOURCE_ID相同)。但是,表FILE_INFO不包含与SOURCE_ID关联的名称。
我正在尝试打印表FILE_INFO中的所有行以及相应的SOURCE名称,我只想要提供该文件的源以“DONATELLO”开头的行。
此查询适用于我,但运行速度非常慢。我的代码有更好的方法吗?它工作正常,直到我添加最后'where'子句。当包含它时,它运行得很慢。
感谢您的投入。
答案 0 :(得分:2)
这不一样吗?
SELECT source.name, file_info.*
FROM FILE_INFO
JOIN source
ON source.id = file_info.source_ID
WHERE source.name like 'Donatello.%'
答案 1 :(得分:1)
您IN
子句使用子查询,并再次查询source
表。
为什么不简单地将SQL用作以下内容?
SELECT source.name, file_info.*
from FILE_INFO
JOIN source
ON source.id = file_info.source_ID
where source.name like 'Donatello.%';
答案 2 :(得分:1)
您是否在name
表的source
列上有索引?
为什么不像这样编写查询:
SELECT source.name, file_info.*
from FILE_INFO
JOIN source
ON source.id = file_info.source_ID
where source.name like 'Donatello.%';
答案 3 :(得分:0)
以下情况如何?
SELECT source.name, file_info.*
from FILE_INFO
JOIN source
ON source.id = file_info.source_ID and source.name like 'Donatello.%';
答案 4 :(得分:0)
将条件更改为简单条件并反转表格顺序:
SELECT source.name, file_info.*
from source
JOIN FILE_INFO
ON source.id = file_info.source_ID
where source.name like 'Donatello.%'
索引位于source(name)
和file_info(source_ID)
。
这会更快,因为where子句可以被监视到连接表列表中的第一个表,因此索引可以与条件一起使用。