Как я произвожу сообщения о ходе выполнения от оператора SELECT?

Это была проблема версии.

Нужно было убедиться, что все платформы (mLab и моя локальная база данных) использовали одну и ту же версию Mongoose.

npm install mongoose@5.4.8 --save 
8
задан Eric Burnett 24 September 2008 в 19:48
поделиться

11 ответов

Нет никакого способа получить состояние выполнения единого запроса. Ни один из основных механизмов базы данных не обеспечивает эту функциональность.
Кроме того, измеримые издержки были бы сгенерированы от любой реализации прогресса, был для существования, поэтому если запрос уже неловко занимает много времени таким образом, что Вы хотите показать, что прогресс, вызывая дополнительное замедление путем показа сказал, что прогресс не мог бы быть целью дизайна.
Можно найти эту статью об оценке прогресса выполнения SQL полезной, хотя его практические последствия ограничены.

5
ответ дан 5 December 2019 в 08:01
поделиться

Сам SQL не имеет никакого условия для такого рода вещи. Любой способ сделать это включил бы разговор непосредственно с механизмом базы данных и не будет стандартным через базы данных.

3
ответ дан 5 December 2019 в 08:01
поделиться

Действительно идея прогресса с основанными на наборе операциями (который является тем, что использует реляционная база данных) не была бы слишком полезна, по крайней мере, не, как отображено с индикатором выполнения (процент, сделанный по сравнению с общим количеством). К тому времени, когда оптимизатор выяснил то, что он должен был сделать и действительно понял полную стоимость операции, Вы уже завершили значительную часть операции. Дисплеи прогресса действительно предназначены для повторяющихся операций, а не операций присвоения.

Это говорит о Вашей общей казни оператора SELECT. Для вставок, которые являются отдельными операторами, существуют все виды способов сделать это от submitter путем контроля нормы потребления операторов. Если они - объем, вставляет (выбор в, вставьте от, и т.п.), затем, у Вас действительно есть та же проблема, которую я описал выше. Операции присвоения обрабатываются в пакетном режиме способом, которые делают тип индикатора выполнения дисплея несколько бессмысленным.

3
ответ дан 5 December 2019 в 08:01
поделиться

Я нахожусь на SQL Где угодно группа разработчиков механизма и в настоящее время нет никакого способа сделать это. Я ничего не могу обещать, но мы рассматриваем добавление этого типа функциональности к будущему выпуску.

3
ответ дан 5 December 2019 в 08:01
поделиться

Нет, конечно, никакого стандартного SQL решения этого. Извините, что был мрачен, но я не видел ничего, что может сделать это в Oracle, SQL Server, Sybase или MySQL, таким образом, я не слишком выразил бы надежду на SQLAnywhere.

2
ответ дан 5 December 2019 в 08:01
поделиться

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

1
ответ дан 5 December 2019 в 08:01
поделиться

Можно моделировать эффект для пользователей путем синхронизации нескольких выполнений, затем наличия усовершенствования индикатора выполнения в средних записях / второсортный.

Единственные другие пути будут

1 - Обратитесь к API своего механизма базы данных, чтобы видеть, делает ли он какое-либо условие для этого

или

2 - Повредите свою ВСТАВКУ во многие меньшие операторы и отчет о них, когда Вы идете. Но это окажет значительное отрицательное влияние производительности.

0
ответ дан 5 December 2019 в 08:01
поделиться

Я соглашаюсь, что SQL не имеет способа сделать это непосредственно. Один путь мог бы быть, чтобы только вставить TOP 1000 за один раз и затем распечатать Ваше сообщение о состоянии. Затем продолжайте повторять это по мере необходимости (в цикле некоторого вида). Оборотная сторона - то, что Вам затем был бы нужен способ отслеживать то, где Вы.

Я должен отметить, что этот подход не будет так же эффективен как просто выполнение одной большой ВСТАВКИ

2
ответ дан 5 December 2019 в 08:01
поделиться

Если у Вас должен быть он, или Вы умираете, для вставки, обновления, удаляете Вас, может использовать некоторую триггерную логику с переменными дб, и время ко времени, Вы делаете sql, чтобы получить переменные данные и отобразить некоторое продвижение к пользователю.

Если Вы wan't для использования его я могу записать пример и отправить его.

0
ответ дан 5 December 2019 в 08:01
поделиться

Вот то, что я сделал бы (Sybase / синтаксис SQL Server):

DECLARE @total_rows int

SELECT  @total_rows = count(*) 
FROM    Source_Table

WHILE   @total_rows > (SELECT count(*) FROM Target_Table) 
BEGIN
    SET rowcount 1000 

    print 'inserting 1000 rows' 

    INSERT  Target_Table         
    SELECT  * 
    FROM    Source_Table s
    WHERE   NOT EXISTS( SELECT 1 
                        FROM   Target_Table t
                        WHERE  t.id = s.id )
END

set rowcount 0
print 'done'

Или Вы могли сделать это на основе идентификаторов (предполагает, что идентификатор является числом):

DECLARE @min_id   int, 
        @max_id   int, 
        @start_id int, 
        @end_id   int

SELECT  @min_id = min(id) , 
        @max_id = max(id) 
FROM    Source_Table

SELECT  @start_id = @min_id , 
        @end_id   = @min_id + 1000 

WHILE   @end_id <= @max_id 
BEGIN

    print 'inserting id range: ' + convert(varchar,@start_id) + ' to ' + convert(varchar,@end_id) 

    INSERT  Target_Table         
    SELECT  * 
    FROM    Source_Table s
    WHERE   id           BETWEEN @start_id AND @end_id

    SELECT  @start_id = @end_id + 1, 
            @end_id   = @end_id + 1000 
END

set rowcount 0
print 'done'
2
ответ дан 5 December 2019 в 08:01
поделиться

На всякий случай Вы используете Жабу, можно генерировать ряд операторов INSERT от таблицы и настроить его для фиксации на частоте ввода данных пользователем. Вы могли изменить свои сценарии немного и затем видеть, сколько из новых данных фиксировалось, когда Вы идете.

0
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: