Например, у меня есть следующая таблица:
table Product
------------
id
category_id
processed
product_name
Эта таблица имеет индекс по столбцам id
category_id
и processed
и (category_id, proccessed)
. Статистические данные в этой таблице:
select count(*) from Product; -- 50M records
select count(*) from Product where category_id=10; -- 1M records
select count(*) from Product where processed=1; -- 30M records
Мой самый простой запрос, который я хочу запросить: (выберите * является обязательным).
select * from Product
where category_id=10 and processed=1
order by id ASC LIMIT 100
Вышеуказанный запрос без ограничения имеет только около10000 записей.
Я хочу вызвать вышеуказанный запрос несколько раз. Каждый раз, когда я выхожу, я обновляю поле processed
до 0. (поэтому оно не появится в следующем запросе). Когда я тестирую реальные данные, иногда оптимизатор пытается использовать id
в качестве ключа, так что это стоит много времени.
Как я могу оптимизировать приведенный выше запрос (в общем случае)
P / S: во избежание путаницы я знаю, что лучшим индексом должен быть (категория, обработано, id). Но я не могу изменить индекс. Мой вопрос касается только оптимизации запроса.
Спасибо