Здравствуйте. Столкнулся с мега неприятным глюком. Задача найти и посчитать порядковый номер записи с определенным ID в таблице в более чем с 500.000 записями. Делаю запрос:
SELECT rownum, id FROM (
SELECT @rownum := @rownum +1 AS rownum, companies.id
FROM companies, (SELECT @rownum :=0) r
WHERE `companies`.`delete_date` IS NULL
ORDER BY companies.mng_status DESC
LIMIT 5000
) AS src
WHERE src.id =116912
Результат верный. rownum возвращается 27.
Но если я уберу LIMIT 5000 (как и должно быть) или поставлю его польше 14800, то результат вообще странный - rownum = 1472 !
EXPLAIN также показывает разные результаты выполнения:
С LIMIT 5000:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY ALL NULL NULL NULL NULL 5000 Using where
2 DERIVED system NULL NULL NULL NULL 1
2 DERIVED companies index NULL mng_status 4 NULL 5000 Using where
3 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
С LIMIT 15000 (или без):
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY ALL NULL NULL NULL NULL 15000 Using where
2 DERIVED system NULL NULL NULL NULL 1 Using filesort
2 DERIVED companies ALL NULL NULL NULL NULL 116937
3 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
Пожалуйста, помогите. Может что-то с настройками. Но что и где увеличивать не знаю...
Спасибо!