За последние 24 часа нас посетили 32819 программистов и 1820 роботов. Сейчас ищут 867 программистов ...

Выбрать минимальное значение

Тема в разделе "MySQL", создана пользователем Ximik, 15 май 2007.

  1. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Знаю что вопрос очень тупой, но все же. Как наиболее оптимально всмысле производительности сделать запрос, который достал из таблицы запись с минимальным значением поля date.
    Была мысль сделать вложенный запрос (т.е. сначало находим это минимальное значение, а потом ставим WHERE `date`=...).
    Еще была мысль упорядочить по возврастанию по date, а потом LIMIT 1.

    Но как же все таки оптимально?
     
  2. md5

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

    С нами с:
    29 янв 2007
    Сообщения:
    250
    Симпатии:
    0
    MIN() - если значение

    ORDER BY `field` ASC
    LIMIT 1
    - если весь ряд
     
  3. Amian

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

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    оптимальней некуда
     
  4. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Просто я не знаком с внутренними процессами в mySQL. И не знаю как там идет упорядочивание. Всего массива или только того, что в лимите.
     
  5. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    если по полю есть индекс, то min() выбирает значение оттуда без скана таблицы
     
  6. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Спасибо.
     
  7. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    [sql]SELECT `id` FROM `cache` WHERE `date`=min(`date`) LIMIT 1
    SELECT `id` FROM `cache` WHERE `date`=min(`date`) GROUP BY `id` LIMIT 1
    SELECT `id` FROM `cache` WHERE `date`=min(`date`) GROUP BY `date` LIMIT 1[/sql]

    Но выдает ошибку для всех трех запросов одну и ту же.

    #1111 - Invalid use of group function
     
  8. md5

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

    С нами с:
    29 янв 2007
    Сообщения:
    250
    Симпатии:
    0
    SELECT
    FROM
    ORDER BY `date` ASC
    LIMIT 1
     
  9. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Я об этом, а упорядочивание походу ресурсоемче.
     
  10. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    Ximik
    если упорядочивание по индексированному полю, с лимитом = 1, то всё ок
     
  11. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    [sql] SELECT `id` FROM `cache` WHERE `date`=min(`date`) LIMIT 1[/sql]

    Так? Но ведь выдает ошибку? Или просто через DESC и это не даст падения в производительности? Просто в этом блоке это очень критично.
     
  12. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    нет, не так. если тебе нужен id из строки с минимальной датой, то
    Код (Text):
    1. select id from cache order by date limit 1
     
  13. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Ага, понял, спасибо. Буду пробовать.