У меня здесь очень простая структура таблицы. Просто список слов, связанных с простым user_id.
Word Table:
word - varchar(50)
user_id - integer
Мне нужно найти слова, используемые одним пользователем, которые не используются другими пользователями. В настоящее время я делаю это, и он работает нормально на Postgresql (9.0.3) на 200 тыс. Слов (~ .3-.5 секунд) и полностью падает на MySQL (5.1.54) с теми же данными (5+ минут и все еще работает). Все используемые столбцы проиндексированы.
SELECT
word, count(word) as count
FROM
words
WHERE
word not in (select word from words where user_id <> 99 group by word)
and user_id = 99
GROUP BY word
ORDER BY count desc LIMIT 20
1) Кто-нибудь знает лучший способ сделать это?
2) Кто-нибудь знает, почему он не работает на MySql?
РЕДАКТИРОВАТЬ: Это исправляет проблему в MySQL, от 5 минут + до 10-20 мс - спасибо Borealid
SELECT
word, count(word) as count
FROM
words
WHERE
word not in (select distinct word from words where user_id <> 99)
and user_id = 99
GROUP BY word
ORDER BY count desc LIMIT 20
Спасибо.