【发布时间】:2012-04-03 19:37:31
【问题描述】:
为什么这个 MySQL 查询在一个有 17k 行的表上需要永远(并且永远不会完成)?
SELECT * FROM files_folders WHERE file IN (SELECT file FROM files_folders WHERE folder = 123);
基本上,一个文件可以位于多个文件夹中(一个物理文件及其副本)。我正在尝试获取文件夹 123 中的所有文件。现在在我的示例中,文件夹 123 中有 2 个文件。ID #4222 和 ID #7121。但是这两个文件可能在其他文件夹以及文件夹 123 中。
我这样做是错误的方式还是我遗漏了什么?
编辑:这是表结构的示例。
+--------------+
| file | folder|
+------+-------+
| 1 | 1 |
| 2 | 1 |
| 1 | 2 |
| 3 | 2 |
| 4 | 3 |
+------+-------+
所以我想选择文件夹 1 中将返回的所有文件(及其副本):
+--------------+
| file | folder|
+------+-------+
| 1 | 1 |
| 2 | 1 |
| 1 | 2 |
+------+-------+
因为文件 1 在文件夹 1 和 2 中。
谢谢。
【问题讨论】:
-
你有
Folder的索引吗? -
我错过了什么吗?为什么不只是:
SELECT * FROM files_folders WHERE Folder = 123; -
为什么不只是
SELECT * FROM files_folders WHERE Folder = 123?目前您选择IDwhereFolder = 123然后基本上选择*whereID = ID。 -
一个文件可以在多个文件夹中。所以,基本上我想删除文件的每个副本,包括存储在文件夹中的文件,因为文件可以在文件夹中,而所述文件的副本可能在其他地方。