Я плохо разбираюсь в MySQL, поэтому часто ловлю себя на том, что готовлю неоптимальные запросы, которые работают, но я знаю, что они должны быть ужасно неэффективными. Я надеюсь, что вы, ребята, дадите мне несколько указателей, почему следующий запрос не работает должным образом, и какие методы мне следует использовать для выполнения подобных запросов.
У меня следующая структура таблицы:
TABLE Files
files_id => INT(12), PRIMARY, AUTO INCREMENT, NOT NULL
files_name => VARCHAR(255), NOT NULL
(some other fields such as file type etc)
TABLE File_Permissions
perm_id => INT(12), PRIMARY, AUTO INCREMENT, NOT NULL
perm_files_id => INT(12), NOT NULL
perm_users_id => INT(12), NOT NULL
Я извлекаю список файлов, которые пользователь может просматривать с помощью следующего SQL:
SELECT files_name FROM Files WHERE files_id IN
(SELECT perm_files_id FROM File_Permissions WHERE perm_users_id = 'xxxxxx');
Это, насколько я могу судить, будет проходить через каждую из тысяч записей в таблице файлов, и для каждой из них выполняется подзапрос, который выбирает из таблица File_Permissions для проверки идентификатора пользователя.
Это занимает почти 2 секунды на запрос. Я уверен, что здесь что-то не так, я просто не не знаю, что это такое.
Большое спасибо за помощь!