Я пытаюсь ускорить запрос, который у меня сейчас есть:
SELECT *
FROM `events`
WHERE (field1 = 'some string' or field1 = 'some string')
and is_current = true
GROUP BY event_id
ORDER BY pub_date
это занимает примерно 30 секунд.
field1 - varchar (150)
Я сейчас индексирую
field1, is_current, event_id, pub_data
благотворительность, pub_date, is_current
и все поля индивидуально ...
Я действительно не уверен, какие поля следует индексировать вместе, когда я удаляю порядок по, запрос обрабатывается примерно до 8 секунд, и если я удаляю и порядок по, и группу по, это меньше 1 секунды. ..
Что именно должно быть проиндексировано в этом случае, чтобы ускорить запрос?
Edit:
Я выполнил объяснение по измененному запросу (который больше не включает группу по):
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE events range is_current,field1_2,field1_3,field1_4,field1 field1_3 153 NULL 204336 Using where; Using filesort
Что указывает на использование ключа field1_3: field1 & is_current
Хотя он не использует ключ, который включает эти два поля и pub_date (для упорядочения ..?)
Он также использует FILESORT, что, похоже, является главной проблемой ..
есть идеи, почему он использует сортировку файлов, хотя поле pub_date также проиндексировано (вместе с другими полями)?