длительные запросы: наблюдение частичных результатов? - PullRequest
0 голосов
/ 29 января 2010

В рамках проекта анализа данных я буду выпускать несколько длительных запросов к базе данных mysql. Мой будущий курс действий зависит от результатов, которые я получу на этом пути. Для меня было бы полезно иметь возможность просматривать частичные результаты, генерируемые оператором SELECT, который все еще выполняется.

Есть ли способ сделать это? Или я застрял в ожидании завершения запроса для просмотра результатов, которые были сгенерированы в первые секунды его выполнения?

Спасибо за любую помощь:)

Ответы [ 3 ]

1 голос
/ 10 февраля 2010

Одна вещь, которую вы можете рассмотреть, это выборка ваших таблиц вниз. Это хорошая практика для анализа данных в целом, чтобы ускорить вашу итерацию при написании кода.

Например, если у вас есть таблица, создайте привилегии, и у вас есть несколько мега-огромных таблиц X с ключом unique_id и некоторыми данными data_value

Если unique_id является числовым, почти в любой базе данных

create table sample_table as
select unique_id, data_value
  from X
 where mod(unique_id, <some_large_prime_number_like_1013>) = 1

даст вам случайную выборку данных для обработки ваших запросов, и вы сможете внутренне объединить вашу sample_table с другими таблицами, чтобы повысить скорость тестирования / результатов запроса. Благодаря выборке результаты вашего запроса должны примерно соответствовать тому, что вы получите. Обратите внимание, что номер, с которым вы моддируете, должен быть простым, иначе он не даст правильный пример. Приведенный выше пример сократит вашу таблицу до 0,1% от исходного размера (точнее 0,0987%).

Большинство баз данных также имеют лучшие методы выборки и случайных чисел, чем просто использование мода. Проверьте документацию, чтобы увидеть, что доступно для вашей версии.

Надеюсь, это поможет, McPeterson

1 голос
/ 22 февраля 2010

Это зависит от того, что делает ваш запрос. Если перед выводом требуется полный набор результатов - например, это может произойти для запросов с группировкой или упорядочением или с предложениями, то ничего не поделаешь.

Если, однако, причиной задержки является буферизация на стороне клиента (которая является режимом по умолчанию), то это можно отрегулировать, используя «mysql-use-result» в качестве атрибута обработчика базы данных, а не по умолчанию ». MySQL-магазин-результат». Это верно для интерфейсов Perl и Java: я думаю, что в интерфейсе C вы должны использовать небуферизованную версию функции, которая выполняет запрос.

1 голос
/ 05 февраля 2010

В общем случае частичный результат не может быть получен. Например, если у вас есть агрегатная функция с предложением GROUP BY, то все данные должны быть проанализированы, прежде чем будет возвращена 1-я строка. Предложение LIMIT вам не поможет, потому что оно применяется после вычисления вывода. Может быть, вы можете дать конкретные данные и запрос SQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...