За последние 24 часа нас посетили 20077 программистов и 1695 роботов. Сейчас ищут 1847 программистов ...

Как работает select+limit?

Тема в разделе "MySQL", создана пользователем joost, 26 дек 2007.

  1. joost

    joost Guest

    Если просто select * from table where code>1, то проходит всю таблицу и выбирает все записи

    А если select * from table where code>1 limit 10 , то проходит всю таблицу и выбирает меньше, но не более 10 записей
    или проходит не всю таблицу, а только столько записей, чтобы выбрать не более 10, которые подходят под условие?
     
  2. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    joost
    Зависит от индексов. Если есть подходящий индекс, по которому можно сразу отсечь ненужную часть таблицы, то обработана будет лишь небольшая часть данных. В противном случае обработка записей пойдет с самого начала и до тех пор, пока не будет набрано достаточное количество, или не дойдем до конца таблицы - как повезет.
     
  3. joost

    joost Guest

    Если в таблице есть 200 записей подходящих под
    select * from table where code>1

    то select * from table where code>1 limit 10 будет сделано намного быстрее чем select * from table where code>1?
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это если индекс есть на code
     
  5. joost

    joost Guest

    вообщето на практике не code>1, a name like '%text%'


    меня интересует будет ли select переберать все записи (если указать limit 10) когда уже нашол 10 записей, которые попадают под условие, или остановится?
     
  6. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    уж наверно субд не дураки пишут :)
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    В данном конкретном случае - скорее всего так и будет. Но вот добавте туда ORDER BY... :D
     
  8. joost

    joost Guest


    что даст ORDER BY? и по какому полю делать ORDER BY?
     
  9. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    joost сортировку по полю (с выборкой для этого всех записей) и в данном конкретном случае - тооормооозаааааааа.
     
  10. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Всё просто, если выборка идёт по условию с полем, на которое есть индекс, то MySQL отфильтровывает данные по индексу и если нету условий сортировки, он остановится при нахождении нужного кол-ва данных (если не стоит SQL_CALC_FOUND_ROWS). Если добавляется сортировка, то ему надо выбрать ВСЕ данные, удовлетворяющие условию, отсортировать и только потом отрезать LIMIT'ом. Ну по сути он это не делает только в одном случае, если нужны первые X записей (когда стартовая запись равна 0 - LIMIT 10, LIMIT 0, 10) - в остальных случаях ему приходится обрабатывать больше данных. Вообщем читайте mysqlpreformanceblog.com :)