Почему запрос [sql]SELECT * FROM goods LIMIT 10[/sql] выполняется дольше, чем [sql]SELECT * FROM goods LIMIT 100[/sql]??
Подумал что у меня кривые руки. Но сделал маленький тест. Результаты такие же. Это особенность mysql?
пруфлинк. то есть замеры. повторяющиеся. как вариант - меняется план запроса, то есть полный перебор оказывается быстрее попытки идти по индексу (если он у тебя есть). Но скорее всего случайный разброс от внешних причин и ты выдумываешь ветряные мельницы вместо дела.
PHP: <? function getmicrotime() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $query = "SELECT * FROM goods LIMIT "; $link1=mysql_connect ("localhost","root",""); mysql_select_db("vexler",$link1); $start = getmicrotime(); mysql_query($query."10"); $finish = getmicrotime(); echo "10 позиций - ".(float)($finish-$start)."<br>"; $start = getmicrotime(); mysql_query($query."100"); $finish = getmicrotime(); echo "100 позиций - ".(float)($finish-$start)."<br>"; ?> Результат: Код (Text): 10 позиций - 0.0657341480255 100 позиций - 0.00264883041382 Да и делать мне все равно не че, работы нет Вот поэтому и заморачиваюсь на всякую ерунду.
С mysqli такая же беда: PHP: <? $query = "SELECT * FROM goods LIMIT "; $mysqli = new mysqli ("localhost","root","","vexler"); $start = getmicrotime(); $mysqli->query($query."10"); $finish = getmicrotime(); echo "10 позиций - ".(float)($finish-$start)."<br>"; $start = getmicrotime(); $mysqli->query($query."100"); $finish = getmicrotime(); echo "100 позиций - ".(float)($finish-$start)."<br>"; ?> результат: Код (Text): 10 позиций - 0.209599971771 100 позиций - 0.00333499908447
1) усредни. меня постоянно бесит, что первый запрос к базе (локально) дает огромное время, на подгрузку индексов что ли. Второй и более быстры, и SQL_NO_CACHE не помогает. 2) индексы, сам запрос.
Ты прав. Дело в том что это первый запрос к базе. Поменял запросы местами, и всё встало на свои места: Код (Text): 100 позиций - 0.170404911041 10 позиций - 0.00151491165161 Даже и не знал об этом.. Век живи - век учись.
http://www.issociate.de/board/post/4939 ... CACHE.html Мораль: SQL_NO_CACHE не поможет. система сцуко кеширует доступ к файлам.
Вот поэтому первый запуск теста никогда не включают в результаты, а так же тест делают не 1 раз, а хотя бы 10-20 итераций каждый и вычисляют среднее значение.
Задам вопрос здесь же. Есть дамп базы, каждая таблица в отдельном файле, таблицы от 1 до 2х гб. Все залетели со свистом, а одна (весом 1 гб) не хочет, жду третий час. Проблемная таблица связывающая, с 4мя полями int. До этого были такие же таблицы, за минут 10 все отлично залетало. В чем может быть причина? Качество и количество индексов может так существенно повлиять на скорость добавления? Или памяти или еще чего-то не хватает? Комп дико глючит, из браузеров работает только хром, открыть ничего нельзя. Есть смысл ждать еще 5 часов или все зависло? Попытка не первая, до этого ждал час и перезагружался.
зависло конечно. Руби консоль, заново открывай и делай show processlist, потом kill зависших процессов
Не в первый раз выполняю этот импорт, а вдруг все-таки стоит только ожидать? Вот это хорошо или плохо? Код (Text): ilya@ilya-desktop-88:~$ ps a PID TTY STAT TIME COMMAND ... 6233 pts/0 S+ 0:18 mysql -uroot -px xxxxxx dbname ...
Растудыть твою, и sypex не может закончить уже 4 часа. Есть еще какие-то способы вставить эту таблицу?
Попытка поставить оригинальные индексы обращается в ошибку (duplicate entry), но не зависает. Так что создал свои индексы с блек джеком и шлюхами.