2016-12-16 86 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'請求這些表,然後,列出了外國約束表,這些需要檢查,但速度是必不可少的,因此加入它們就是高性能 –

相關問題