Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость большого запроса, или limit одинакого ли? 
:(
    Опции темы
Logo
Дата 11.5.2011, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



MySQL выбирает запрос сразу или, по мере его обхода?
Одинакого ли по скорости будет работать запрос без limit, и обход результатов этого запроса с помощью например PHP mysql_fetch_row до определенного колличества строк, и запрос с limit, ограничивающий на такое же колличество строк?
PM MAIL   Вверх
solenko
Дата 11.5.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 4
Всего: 67



Цитата(Logo @  11.5.2011,  11:57 Найти цитируемый пост)
MySQL выбирает запрос сразу или, по мере его обхода?

Просматривает строки до тех пор, пока не наберет нужное количество для RS.

Вопрос сам по себе некорректный, т.к. для каждого запроса нужно свое решение. 
Есть групировка? Будет свормирован весь RS и только потом отброшено ненужное.
Есть сортировка? Аналогично.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Zloxa
Дата 11.5.2011, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(solenko @  11.5.2011,  14:02 Найти цитируемый пост)
Вопрос сам по себе некорректный

Однако ж, как ни странно я понял вопрос ТС, но не понял Вашего ответа, а он интересен и мне  smile 

попытаюсь уточнить:
Пусть я выполняю "select * from some_table". some_table содержит 10млн записй. Будет ли фетч первых десяти записей результата эквивалентен по количеству чтений фетчу всего результата запроса "select * from some_table limit 10"? Если мася держит разные типы куросов, то имеем в виду есесно однопроходный.

Вопрос встает потому как для оракла ответ - да(при условии что не используется буфер для фетча). А для ms sql, емнип, ответ - нет, в первом случае таблица будет сканирована полностью.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Logo
Дата 12.5.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата(solenko @  11.5.2011,  14:02 Найти цитируемый пост)
Вопрос сам по себе некорректный, т.к. для каждого запроса нужно свое решение. 
Есть групировка? Будет свормирован весь RS и только потом отброшено ненужное.
Есть сортировка? Аналогично. 


Если сортировка по полям, для которых есть индекс, выборки всей таблицы не будет, разве не так? А если по полям без индексов, то просмотр всей таблицы будет и в случае limit.
Тоже должно быть справедливо и для группировки, с сортировкой по группируемуму полю (по умолчанию).

Вобщем условия такие, сортировка по полю с индексом, и where.
PM MAIL   Вверх
Akina
Дата 12.5.2011, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  11.5.2011,  23:41 Найти цитируемый пост)
Пусть я выполняю "select * from some_table". some_table содержит 10млн записй. Будет ли фетч первых десяти записей результата эквивалентен по количеству чтений фетчу всего результата запроса "select * from some_table limit 10"? Если мася держит разные типы куросов, то имеем в виду есесно однопроходный.

В данном случае вопрос-то не к MySQL, а к PHP. Как устроено внутри mysql_fetch_row?
Однако с учётом
Цитата(PHP Help)

mysql_query() посылает запрос активной базе данных сервера, на который ссылается переданный указатель. [skipped] Результат запроса буферизируется. 

склонен думать, что на момент фетча уже вся выборка вытащена на клиента. Т.е. фетч-то отмолотит быстро, но вот пока на клиента будет ползти результат нелимитированного запроса... хотя пых не тоже идиоты писали, и имхо выборка тащится асинхронно - т.е. если запись уже приплыла, фетч её вернёт, а коли нет - придётся подождать... с другой стороны, для некоторых типов запросов функция возвращает количество строк, которые задеты запросом...

В общем, хрен знает smile  надо снифить  smile 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
gcc
Дата 12.5.2011, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



на сколько я понмю, я в курсоре mysql написал примерно

Код

select * from some_table limit 10;
select * from some_table;


скорость была одинаковая в двух случаях

Добавлено через 4 минуты и 58 секунд
первый раз:

c limit
Код

+----------+
| count(*) |
+----------+
|        0 | 
+----------+
1 row in set (8.86 sec)



Код

+----------+
| count(*) |
+----------+
|        0 | 
+----------+
1 row in set (3.67 sec)



Код

+----------+
| count(*) |
+----------+
|        0 | 
+----------+
1 row in set (3.68 sec)






PM WWW ICQ Skype GTalk Jabber   Вверх
Logo
Дата 13.5.2011, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Я думал, что fetch везде одинаково работает, PHP привел просто для примера, так то я использую Perl DBI/DBIx::Class. 
PM MAIL   Вверх
gcc
Дата 13.5.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



тут есть какие-то классы может там что-то есть подходящее:
http://search.cpan.org/~oyama/Net-MySQL-0.09/MySQL.pm
http://search.cpan.org/~bits/DBIx-FetchLoop-0.6/FetchLoop.pm

кстати, еще для тестирования можно попробовать AnyEvent::DBI 

оно на подобе асинхронных запросов в PostgreSQL
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.