Выполняется ли LOAD DATA LOW_PRIORITY асинхронно?

Я хочу выполнить оператор LOAD DATA LOW_PRIORITY INFILE из Java.

Я имею дело только с движком MyISAM.

Меня интересует, будет ли statement.execute("LOAD DATA LOW_PRIORITY INFILE ...") выполнять этот запрос асинхронно или будет блокироваться до тех пор, пока этот оператор не будет завершен.

Я спрашиваю об этом, поскольку у меня есть операции SQL после этого оператора, которые основаны на загруженных данных, но мне все же интересно, что любая операция чтения в этой таблице, которая выполняется одновременно, будет иметь более высокий приоритет, чем оператор LOAD DATA.


person Michael    schedule 23.01.2013    source источник


Ответы (1)


LOAD DATA LOW_PRIORITY INFILE ... блокируется до завершения командной строки, поэтому я предполагаю, что ваш код тоже будет блокироваться.

Если вы хотите, чтобы параллельные транзакции могли читать данные из вашей таблицы во время импорта, вам следует использовать параметр CONCURRENT вместо LOW PRIORITY.

Как указано в руководстве:

Если вы укажете CONCURRENT с таблицей MyISAM, которая удовлетворяет условию одновременных вставок (то есть не содержит свободных блоков в середине), другие потоки могут извлекать данные из таблицы, пока выполняется LOAD DATA.

person RandomSeed    schedule 23.01.2013
comment
Спасибо, я надеюсь, что он заблокируется на LOW_PRIORITY, как вы ответили - person Michael; 23.01.2013