За последние 24 часа нас посетили 60945 программистов и 1744 робота. Сейчас ищут 909 программистов ...

SELECT, WHERE и LIMIT 1

Тема в разделе "MySQL", создана пользователем rar, 21 окт 2009.

  1. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Будет ли запрос выполняться быстрее, если по логике мне нужно выбрать одну запись по условию и я применю оператор LIMIT 1?

    Т.е.:
    [sql]SELECT * FROM `my_table` WHERE `id` = ID;[/sql]

    Или

    [sql]SELECT * FROM `my_table` WHERE `id` = ID LIMIT 1;[/sql]

    Будет ли выигрыш в скорости?
     
  2. kostyl

    kostyl Guest

    где-то тут уже обсуждалось, причем недавно
     
  3. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Там ничего толком не сказали.
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    да, если у тебя не одна запись с этим ид.
     
  5. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    А если только одна?
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    нет.
    еще это иногда применяют для защиты от мусора в базе, чтобы показывалась последняя актуальная, но тогда надо использовать order by
     
  7. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    А почему нет? Не логично ли, если уже найдена строка соответствующая WHERE, и она одна (LIMIT 1) - то нет смысла дальше искать записи.
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Смотря какой столбец. Если UNIQUE или PRIMARY (где уникальный по дефолту), то после выбора первой записи поиск будет остановлен. В других случаях - нет. ИМХО.
     
  9. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Ну есть WHERE `id` = ID, где ID является первичным ключом с автоинкрементом. Будет остановлен?
     
  10. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Блин, да бери и проверяй.
     
  11. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Как?
     
  12. akrinel

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

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    м?
     
  13. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ногами.

    Создаешь базу на 10-100млн записей

    И гоняешь тестовые запросы с лимитом и без. По полю с ключем, без ключа, по составному ключу.
     
  14. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо. Так и сделаю.
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Зачем?
    Для таких проверок достаточно базу из 2х записей. Только проверять как - не пойму. По хэндлерам что-ли?
     
  16. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Не увидишь ты ничего на 2х записях. Там даже на 11к записях ничего почти не видно

    А проверять explain и profile
     
  17. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    так и стоит ли заморачиваться?)
     
  18. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну, чем бы дитя не тешилось....

    Хочет он знать - пусть проверяет.