Если просто select * from table where code>1, то проходит всю таблицу и выбирает все записи А если select * from table where code>1 limit 10 , то проходит всю таблицу и выбирает меньше, но не более 10 записей или проходит не всю таблицу, а только столько записей, чтобы выбрать не более 10, которые подходят под условие?
joost Зависит от индексов. Если есть подходящий индекс, по которому можно сразу отсечь ненужную часть таблицы, то обработана будет лишь небольшая часть данных. В противном случае обработка записей пойдет с самого начала и до тех пор, пока не будет набрано достаточное количество, или не дойдем до конца таблицы - как повезет.
Если в таблице есть 200 записей подходящих под select * from table where code>1 то select * from table where code>1 limit 10 будет сделано намного быстрее чем select * from table where code>1?
вообщето на практике не code>1, a name like '%text%' меня интересует будет ли select переберать все записи (если указать limit 10) когда уже нашол 10 записей, которые попадают под условие, или остановится?
joost сортировку по полю (с выборкой для этого всех записей) и в данном конкретном случае - тооормооозаааааааа.
Всё просто, если выборка идёт по условию с полем, на которое есть индекс, то MySQL отфильтровывает данные по индексу и если нету условий сортировки, он остановится при нахождении нужного кол-ва данных (если не стоит SQL_CALC_FOUND_ROWS). Если добавляется сортировка, то ему надо выбрать ВСЕ данные, удовлетворяющие условию, отсортировать и только потом отрезать LIMIT'ом. Ну по сути он это не делает только в одном случае, если нужны первые X записей (когда стартовая запись равна 0 - LIMIT 10, LIMIT 0, 10) - в остальных случаях ему приходится обрабатывать больше данных. Вообщем читайте mysqlpreformanceblog.com