У меня есть область моего приложения, в которой выполняется множество сложных запросов, возвращающих 10 с записей на страницу из таблицы 1000 с. Вот несколько примеров.
SELECT `tasks`.* FROM `tasks` WHERE (`tasks`.company_id = 21) AND (employee_id IS NULL) AND (status != 'Complete') AND (status != 'Cancelled') ORDER BY scheduled desc LIMIT 0, 30;
SELECT `tasks`.* FROM `tasks` WHERE (`tasks`.company_id = 21) AND (employee_id = 0) AND (status != 'Complete') AND (status != 'Cancelled') AND (scheduled IS NOT NULL) AND (scheduled > '2011-03-28' AND scheduled < '2011-09-28');
SELECT `tasks`.* FROM `tasks` WHERE (`tasks`.employee_id = 27) AND (status != 'Complete') AND (status != 'Cancelled') ORDER BY scheduled desc LIMIT 0, 30
employee_id
и status
присутствуют всегда; company_id
присутствует почти всегда, а scheduled
- это порядок по умолчанию, который пользователь может изменить.
Я попробовал эти индексы:
# ignored for some reason - did not seem to build successfully in the db
add_index :tasks, [:company_id, :employee_id, :status, :scheduled]
# db favorite, but often results in FILESORT
add_index :tasks, [:employee_id, :status, :scheduled]
Каков наилучший способ справиться с моей проблемой и сократить количество файлов, которые я получаю по этим запросам?
Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию.