Как эффективно индексировать эти запросы - PullRequest
1 голос
/ 29 июня 2011

У меня есть область моего приложения, в которой выполняется множество сложных запросов, возвращающих 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]

Каков наилучший способ справиться с моей проблемой и сократить количество файлов, которые я получаю по этим запросам?

Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...