Пожалуйста, обратите внимание на следующую таблицу:Mysql оптимизации, чтобы избежать сканирования таблицы
_____________________
| sentence_word |
|---------|---------|
| sent_id | word_id |
|---------|---------|
| 1 | 1 |
| 1 | 2 |
| ... | ... |
| 2 | 4 |
| 2 | 1 |
| ... | ... |
С помощью этой таблицы структуры Я хочу, чтобы хранить слова предложения. Теперь я хочу узнать, какие слова вместе с определенным словом в предложении. Результат должен выглядеть следующим образом:
_____________________
| word_id | counted |
|---------|---------|
| 5 | 1000 |
| 7 | 800 |
| 3 | 600 |
| 1 | 400 |
| 2 | 100 |
| ... | ... |
запрос выглядит следующим образом:
SELECT
word_id,
COUNT(*) AS counted
FROM sentence_word
WHERE sentence_word.sent_id IN (SELECT
sent_id
FROM sentence_word
WHERE word_id = [desired word]
)
AND word_id != [desired word]
GROUP BY word_id
ORDER BY counted DESC;
запрос работает должным образом, но он всегда сканирует всю таблицу. Я создал индекс для sent_id и word_id. Есть ли у вас какие-либо идеи по его оптимизации, что вам не нужно постоянно сканировать всю таблицу?
сделать автообъединение вместо этого? – jarlh
что это такое, как в И слово! = [Желаемое слово] Он не указан в ваших данных – LoztInSpace
@LoztInSpace Извините, у него была орфографическая ошибка. Это должно быть word_id. Теперь это изменилось. –