Проблема в том, как. Чтобы получить первые 1000 записей, базе данных нужно только отфильтровать базу данных, пока она не найдет 1000 записей, соответствующих поисковому запросу. Для другого запроса база данных должна соответствовать записям, пока у нее не будет 645000 записей, что значительно замедляет работу. Сортировка или другая фильтрация отсутствуют, поэтому индекс по идентификатору не помогает вообще.
Индекс на description
может помочь, но если вы начнете поиск с подстановочного знака, как вы делаете сейчас.
Я вижу два решения.
Первый вариант - добавить индекс FULLTEXT в поле описания. Это позволяет искать слово error
, используя MATCH, а не LIKE. Я думаю, что это будет намного быстрее, но индекс тоже станет больше, и я не уверен насчет оптимизаций в долгосрочной перспективе.
Второе решение: Поскольку вы, очевидно, ищете ошибки (я думаю, вы создаете отчет на таблице журнала?), Вы можете добавить столбец с типом записи. Вы можете дать каждой записи тип (просто целое число), который указывает, где эта запись содержит ошибку или нет. Вам нужно будет обновить таблицу один раз и вставить тип вместе с новыми записями, но это ускорит ваш запрос.
Я должен признать, что это второе решение основано на предположениях о данных и вашей цели. Если я ошибаюсь, предоставьте дополнительную информацию, и я могу найти решение, которое подходит вам лучше.