За последние 24 часа нас посетили 23636 программистов и 1543 робота. Сейчас ищут 1005 программистов ...

LIMIT 10 и LIMIT 100

Тема в разделе "Прочее", создана пользователем WildZero, 1 дек 2010.

  1. WildZero

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

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Почему запрос [sql]SELECT * FROM goods LIMIT 10[/sql] выполняется дольше, чем [sql]SELECT * FROM goods LIMIT 100[/sql]??
     
  2. WildZero

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

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Подумал что у меня кривые руки.
    Но сделал маленький тест. Результаты такие же.
    Это особенность mysql?
     
  3. armadillo

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

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

    как вариант - меняется план запроса, то есть полный перебор оказывается быстрее попытки идти по индексу (если он у тебя есть).

    Но скорее всего случайный разброс от внешних причин и ты выдумываешь ветряные мельницы вместо дела.
     
  4. WildZero

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

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    PHP:
    1.  
    2. <?
    3. function getmicrotime()
    4. {
    5.     list($usec, $sec) = explode(" ", microtime());
    6.     return ((float)$usec + (float)$sec);
    7. }
    8. $query = "SELECT * FROM goods LIMIT ";
    9. $link1=mysql_connect ("localhost","root","");
    10. mysql_select_db("vexler",$link1);
    11. $start = getmicrotime();
    12. mysql_query($query."10");
    13. $finish = getmicrotime();
    14. echo "10 позиций - ".(float)($finish-$start)."<br>";
    15. $start = getmicrotime();
    16. mysql_query($query."100");
    17. $finish = getmicrotime();
    18. echo "100 позиций - ".(float)($finish-$start)."<br>";
    19. ?>
    Результат:
    Код (Text):
    1. 10 позиций - 0.0657341480255
    2. 100 позиций - 0.00264883041382
    Да и делать мне все равно не че, работы нет :(
    Вот поэтому и заморачиваюсь на всякую ерунду.
     
  5. WildZero

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

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    С mysqli такая же беда:
    PHP:
    1.  
    2. <?
    3. $query = "SELECT * FROM goods LIMIT ";
    4. $mysqli = new mysqli ("localhost","root","","vexler");
    5. $start = getmicrotime();
    6. $mysqli->query($query."10");
    7. $finish = getmicrotime();
    8. echo "10 позиций - ".(float)($finish-$start)."<br>";
    9. $start = getmicrotime();
    10. $mysqli->query($query."100");
    11. $finish = getmicrotime();
    12. echo "100 позиций - ".(float)($finish-$start)."<br>";
    13. ?>
    результат:
    Код (Text):
    1.  
    2. 10 позиций - 0.209599971771
    3. 100 позиций - 0.00333499908447
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    1) усредни. меня постоянно бесит, что первый запрос к базе (локально) дает огромное время, на подгрузку индексов что ли. Второй и более быстры, и SQL_NO_CACHE не помогает.
    2)
    индексы, сам запрос.
     
  7. WildZero

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

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Ты прав. Дело в том что это первый запрос к базе.
    Поменял запросы местами, и всё встало на свои места:
    Код (Text):
    1.  
    2. 100 позиций - 0.170404911041
    3. 10 позиций - 0.00151491165161
    Даже и не знал об этом..
    Век живи - век учись.
     
  8. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    будь я базой данных, я бы кешировал результаты запросов...
     
  9. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Подскажи способ, как проверить без кеша.
     
  10. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
  11. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    попробуй под разными юзерами запрос запустить - может кеш для каждого юзера свой
     
  12. Psih

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

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Вот поэтому первый запуск теста никогда не включают в результаты, а так же тест делают не 1 раз, а хотя бы 10-20 итераций каждый и вычисляют среднее значение.
     
  13. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    кеш дисковой подсистемы один и тот же для всех.
     
  14. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Задам вопрос здесь же. Есть дамп базы, каждая таблица в отдельном файле, таблицы от 1 до 2х гб. Все залетели со свистом, а одна (весом 1 гб) не хочет, жду третий час. Проблемная таблица связывающая, с 4мя полями int. До этого были такие же таблицы, за минут 10 все отлично залетало. В чем может быть причина? Качество и количество индексов может так существенно повлиять на скорость добавления? Или памяти или еще чего-то не хватает? Комп дико глючит, из браузеров работает только хром, открыть ничего нельзя. Есть смысл ждать еще 5 часов или все зависло? Попытка не первая, до этого ждал час и перезагружался.

     
  15. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    зависло конечно. Руби консоль, заново открывай и делай show processlist, потом kill зависших процессов
     
  16. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Не в первый раз выполняю этот импорт, а вдруг все-таки стоит только ожидать?
    Вот это хорошо или плохо?
    Код (Text):
    1. ilya@ilya-desktop-88:~$ ps a
    2.   PID TTY      STAT   TIME COMMAND
    3. ...
    4.  6233 pts/0    S+     0:18 mysql -uroot -px xxxxxx dbname
    5. ...
     
  17. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    это значит, что других процессов нет, в том числе и импорта)
     
  18. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Рестартанул mysql, идет импорт через sypex.
     
  19. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Растудыть твою, и sypex не может закончить уже 4 часа. Есть еще какие-то способы вставить эту таблицу?
     
  20. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    возможно в данных таблицы ошибка
     
  21. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Тогда бы консоль выдала ошибку.
    Утро вечера мудренее, с утра запущу на сутки.
     
  22. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    если там висит консоль попробуй фокус на нее ткнуть и нажать Y, пробел или Ентер :)
     
  23. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Удалил индексы - данные залетели за 5 минут. От так от.
     
  24. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    угу. только потом все умирает на создании индексов.
     
  25. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Попытка поставить оригинальные индексы обращается в ошибку (duplicate entry), но не зависает. Так что создал свои индексы с блек джеком и шлюхами.