Убедитесь, что у вас есть индексы, иначе это будет работать очень плохо:
SELECT posts.id, posts.title, posts.content
FROM posts
WHERE NOT EXISTS (
SELECT post_id from tags
WHERE tags.tag LIKE '%$keywords%'
AND posts.id=tags.post_id
)
Получает список всех сообщений, кроме тех, которые имеют тег, соответствующий указанному вами тегу. (Ваш оригинальный запрос ссылался на таблицу «jobs». Я предположил, что это опечатка для «posts».)
Псевдонимы таблицы делают это немного чище:
SELECT p.id, p.title, p.content
FROM posts p
WHERE NOT EXISTS (
SELECT t.post_id from tags t
WHERE t.tag LIKE '%$keywords%'
AND p.id=t.post_id
)
Тогда я бы создал эти индексы:
Posts: id, tag_id
Tags: post_id, tag
Затем запустите ваш запрос с ' объяснение ', чтобы увидеть, хорошо ли он работает. Обновите свой вопрос с результатами, и кто-то предложит дальнейшие советы. Настройка индекса является скорее методом проб и ошибок, чем что-либо еще, поэтому тестирование действительно необходимо.