У меня есть таблица с 1,8 миллионами строк:
Item
-----------
- id
- title
- content
- channel_id
и таблица каналов с 8000+ строками:
Channel
-----------
- id
- name
Мне нужно, чтобы в каждом результате отображались элементы из канала, называемого «глобальным», например, у меня есть следующие каналы:
id | name
________________
1 | global
2 | restaurants
3 | hotels
...
поэтому я попробовал следующие консультации:
SELECT * FROM Item WHERE channel_id = 1 OR channel_id = 2 ORDER BY title ASC LIMIT 10
SELECT * FROM Item WHERE channel_id IN (1, 2) ORDER BY title ASC LIMIT 10
Обе они занимают около 18 секунд! ... и уже есть два индекса для id и channel_id
Обновление
Похоже, проблема в том, что оператор ORDER BY, а не операторы OR или IN, слишком много элементов для заказа.
Обновление
Я исправил это, создав индекс для заголовка:
CREATE INDEX item_by_title ON item (title ASC)