![]() |
|
Модераторы: skyboy |
![]()
|
|
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
MySQL выбирает запрос сразу или, по мере его обхода?
Одинакого ли по скорости будет работать запрос без limit, и обход результатов этого запроса с помощью например PHP mysql_fetch_row до определенного колличества строк, и запрос с limit, ограничивающий на такое же колличество строк? |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 4 Всего: 67 |
Просматривает строки до тех пор, пока не наберет нужное количество для RS. Вопрос сам по себе некорректный, т.к. для каждого запроса нужно свое решение. Есть групировка? Будет свормирован весь RS и только потом отброшено ненужное. Есть сортировка? Аналогично. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Однако ж, как ни странно я понял вопрос ТС, но не понял Вашего ответа, а он интересен и мне попытаюсь уточнить: Пусть я выполняю "select * from some_table". some_table содержит 10млн записй. Будет ли фетч первых десяти записей результата эквивалентен по количеству чтений фетчу всего результата запроса "select * from some_table limit 10"? Если мася держит разные типы куросов, то имеем в виду есесно однопроходный. Вопрос встает потому как для оракла ответ - да(при условии что не используется буфер для фетча). А для ms sql, емнип, ответ - нет, в первом случае таблица будет сканирована полностью. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Если сортировка по полям, для которых есть индекс, выборки всей таблицы не будет, разве не так? А если по полям без индексов, то просмотр всей таблицы будет и в случае limit. Тоже должно быть справедливо и для группировки, с сортировкой по группируемуму полю (по умолчанию). Вобщем условия такие, сортировка по полю с индексом, и where. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
В данном случае вопрос-то не к MySQL, а к PHP. Как устроено внутри mysql_fetch_row? Однако с учётом
склонен думать, что на момент фетча уже вся выборка вытащена на клиента. Т.е. фетч-то отмолотит быстро, но вот пока на клиента будет ползти результат нелимитированного запроса... хотя пых не тоже идиоты писали, и имхо выборка тащится асинхронно - т.е. если запись уже приплыла, фетч её вернёт, а коли нет - придётся подождать... с другой стороны, для некоторых типов запросов функция возвращает количество строк, которые задеты запросом... В общем, хрен знает -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| gcc |
|
||||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 3 Всего: 17 |
на сколько я понмю, я в курсоре mysql написал примерно
скорость была одинаковая в двух случаях Добавлено через 4 минуты и 58 секунд первый раз: c limit
|
||||||||
|
|||||||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Я думал, что fetch везде одинаково работает, PHP привел просто для примера, так то я использую Perl DBI/DBIx::Class.
|
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |