age имеет btree индекс по возрастанию
делаю запрос select * from my_table
where age < 47 order by age asc limit 100
в таблице 10млн, младше 47 лет при этом 1млн
из индекса прочитается миллион строк, а потом произойдёт лимитирование или уже на этапе индекса прочитается первые 100 строк?
Смотрите в explain.
нет возможности ( хочу понять в теории чтение из индекса может лимитироваться или нет. если кто подскажет, буду рад
В теории — можэт. (Если индэкс – btree, и order by в точности по его полю, и планировщик выбрал перебор по индэксу – то всегда будет).
А у нас типа думаешь возможность есть смотреть в твой Explain
Тут очень простой запрос и критерии поиска совпадает с критерием сортировки, поэтому есть очень большая вероятность что лимит опустится вниз по плану запроса в самую первую ноду плана и сортировка не будет производиться физически а будет использоваться порядок индекса Да кстати надо чтобы индекс по полю возраста существовал.
А что нет-то, кстати? Всегда же можно поэкспериментировать на https://sqlize.online/ , https://dbfiddle.uk/ и т.п., если очень хочется.
Обсуждают сегодня