Добрый день!
Существует механизм, который использует индекс в sphinx не для полнотекстового поиска. То есть, по факту это просто табличка с некоторым количеством простых полей (только int).
Довольно простой запрос с элементарным фильтром по этой табличке дал довольно слабый результат, что вызвало некоторое удивление. В процессе поиска проблемы запрос был упрощен до состояния, когда дальше его упрощать некуда и все равно время выполнения запроса фантастическое:
select user_id from index limit 1;
/* Affected rows: 0 Найденные строки: 1 Предупреждения: 0 Длительность 1 query: 0,110 sec. */
Раньше другая версия этой выборки выполнялась за приемлемое время, потому что в ней присутствовала опция OPTION cutoff=X. Если эта настройка в запросе присутствует, то запрос выполняется молниеносно за 0,(0)1.
В моем же случае я эту опцию использовать не могу (или скорее могу, но не знаю как), потому что я использую обратную сортировку по полю. А опытным путем я выяснил, что в случае, если я в запросе к индексу указываю ORDER BY, то индекс сначала по какой-то своей сортировка выбирает записи из индекса по условиям из WHERE, потом обрезает эту выборку до длины, указанной в cutoff, а уже оставшиеся записи сортирует по значению, указанному в ORDER BY. Это работает молниеносно, но мне не подходит совершенно. По моим наблюдением, выборка без указания ORDER BY происходит с сортировкой по id, мне же нужно ORDER BY id DESC.
Приведу пример:
Предположим, что у нас в таблице 1000 записей с id от 1 до 1000. Если я не указываю ORDER BY, но указываю cutoff, то он сортирует по id и я получаю верный результат.
Если же мне нужно ORDER BY id DESC LIMIT 10 OPTION cutoff=10, то сначала индекс, ориентируясь на cutoff возьмет первые 10 записей (id от 1 до 10), а уже их отсортирует в обратном порядке и вернет мне этот результат.
У меня была первая версия, что индекс строится по неправильной сортировке, но я перепроверил конфиг и убедился, что и сам index и его дельта-индекс в своем sql_query содержат правильную сортировку.
Соответственно, я не могу за приемлемое время по нужной мне сортировке выбрать данные.
Заранее благодарю за ответы!