2016-12-16 83 views
1

我有一个表文件什么是MySQL的最快的方法来检查外国REFFERENCE

+------------+ 
| id | name | 
+------------+ 
+ 1 | x.jpg | 
+ 2 | y.jpg | 
+------------+ 

其他的表中,这些文件例如像

+---------------+-------+ 
| id | file_id | user | 
+---------------+-------+ 
+ 1 | 2  | test | 
+ 2 | 1  | test1 | 
+---------------+-------+ 

和要检查,如果一个文件是orphanet,但我不知道它在哪个表中被引用。什么是最快的检查方式?

+0

也许看看参考约束 – Strawberry

回答

2

您将不得不非常明确地与您的查询。让我们假设你另外两个表(table1table2)可能包含对你的Files表的引用。

你会

SELECT Files.* FROM Files 
    LEFT JOIN table1 ON (Files.id = table1.file_id) 
    LEFT JOIN table2 ON (Files.id = table2.file_id) 
WHERE 
    table1.file_id IS NULL 
    AND table2.file_id IS NULL 

此查询将加入您的其他表到你Files表,说:“给我结果,其中File.id不存在在两个表”。您将不得不为每个要搜索的表扩展此查询。

+0

嗯,这不完全是我所需要的原因我不知道所有的表被引用的关键,可以从'INFORMATION_SCHEMA.KEY_COLUMN_USAGE'请求这些表,然后,列出了外国约束表,这些需要检查,但速度是必不可少的,因此加入它们就是高性能 –

相关问题