2010-07-13 5 views
10

Я прошел через код и заметил, что UPDATE LOW_PRIORITY и DELAYED INTO используются для вставки и обновления базы данных. Каково использование этого кода? почему мы должны использовать это?Преимущества UPDATE LOW_PRIORITY и INSERT DELAYED INTO

любые идеи ??

Нужно ли использовать его в каждой вставке и обновлении для разных таблиц в одной базе данных?

ответ

19

С ключевым словом LOW_PRIORITY выполнение UPDATE задерживается до тех пор, пока другие клиенты не читают из таблицы. Обычно чтение клиентов приостанавливается до тех пор, пока запрос обновления не будет выполнен. Если вы хотите, чтобы приоритет чтения читался над запросом на обновление, вы должны использовать LOW_PRIORITY.

Опция DELAYED для оператора INSERT - это расширение MySQL для стандартного SQL, что очень полезно, если у вас есть клиенты, которым не нужно или не нужно ждать завершения INSERT. Это обычная ситуация, когда вы используете MySQL для ведения журнала, и вы также периодически запускаете инструкции SELECT и UPDATE, для выполнения которых требуется много времени.

+13

Также примечание: Начиная с MySQL 5.6.6, INSERT DELAYED устарела и удалена в 5.7 – Petah

0

Если ваши UPDATE в MySQL требуют интенсивной работы, то требуется 1800 секунд, тогда рекомендуется использовать UPDATE LOW_PRIORITY.

+4

Почему 1800 секунд? Вы могли бы объяснить свои рассуждения. –

+0

@Dharma говорил о _ [wait_timeout] (http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_wait_timeout) _ и _ [interactive_timeout] (http: // dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_interactive_timeout)_, которые зависят от флага клиента _CLIENT_INTERACTIVE_. Однако значение по умолчанию для этих переменных составляет 28800 (8 часов), а не 1800. –

-1

Это необходимо использовать, тогда у вас есть большая нагрузка на сервер. И теперь вы, что некоторые UPDATE или INSERT теперь имеют высокий приоритет и могут действовать при загрузке.

Exp. SQL, которые генерируют некоторую статистику или верхнюю часть. Они медленно и не требуют немедленного выполнения.

7

LOW_PRIORITY, HIGH_PRIORITY и DELAYED полезны только в нескольких экземплярах. Если у вас нет БОЛЬШОЙ загрузки, они вам не помогут. Если у вас есть, не делайте ничего, что вы не совсем понимаете.

Все эти отпионы работают только с MyISAM, а не с InnoDB, а не с представлениями.

DELAYED не работает с секционированными таблицами, и он явно предназначен для хранилища данных. Клиент отправляет вставку и затем забывает ее, не дожидаясь результата. Таким образом, вы не будете знать, была ли вложенная вставка, если были повторяющиеся значения и т. Д. Его никогда не следует использовать, в то время как другие потоки могут SELECT из этой таблицы, потому что вставка с задержкой никогда не бывает параллельной.

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

Также обратите внимание, что DELAYED будет удален в Oracle MySQL 5.7 (но не в MariaDB).

Смежные вопросы