Редакцией: Так что это вопрос я использую:оптимизировать MySQL запросов с пунктом IN 10000 записей
SELECT *
FROM contacts
WHERE id in
(
SELECT DISTINCT contacts.id
from contacts INNER
JOIN contacts2tags ON contacts.id = contacts2tags.contactid
WHERE (tagid in (178)))
Он работает очень медленно. Предложения по его оптимизации? Я добавил индексы, но он по-прежнему нуждается в улучшении!
контакты таблица содержит идентификатор, first_name, last_name, .й тегов таблицы содержит идентификатор, имя. contacts2tags таблица содержит ContactID и TagID, которые являются такими же, как и contacts.id tags.id соответственно EXPLAIN:
Пожалуйста, обратите внимание на: optimise mysql query with LIKE operator for 10k records
Это было глупо с моей стороны, чтобы опубликовать часть запрос здесь. Извините, что: P
Вы можете поставить создать синтаксис из таблиц и контактов, а также объяснения из запроса. Так как youre используя имеющийся будет filesort и соблазнительный. Таким образом, это также зависит от емкости вашего сервера. –
Надеюсь, у вас есть индекс на c.id и индекс на t.tagid, и в этом случае я ожидаю, что MySQL найдет записи в таблице contacts2tags, а затем присоединяет их к контактам. Если на t.tagid нет индекса, но вместо этого у вас есть один на t.contactid, он либо должен будет выполнять поиск без ключа в той или иной таблице, в зависимости от того, что он хочет использовать первым. – Kickstart
спасибо. У меня есть индексы как для tagid, так и для id – user415