Spec-Zone .ru
спецификации, руководства, описания, API
|
Для механизмов хранения такой как MyISAM
это фактически выполняет блокировки на уровне таблицы, выполняя DML или операторы DDL, такой оператор в более
старых версиях MySQL (5.6.5 и ранее), который влиял на разделенную таблицу, наложенную блокировка на таблицу в
целом; то есть, все разделы были заблокированы, пока оператор не был закончен. В MySQL 5.7 сокращение блокировки раздела устраняет ненужные блокировки во многих случаях, и
большинство операторов, читающих из или обновляющих разделенный MyISAM
табличная
причина только произведенные разделы, которые будут заблокированы. Например, a SELECT
от разделенного MyISAM
блокировки таблицы
только те разделы, фактически содержащие строки, которые удовлетворяют SELECT
оператор WHERE
условие блокируется.
Для операторов, производящих разделенные таблицы, используя механизмы хранения такой как InnoDB
, та работа блокировка на уровне строки и фактически не выполняет (или
должен выполнить), блокировки до сокращения раздела, это не проблема.
Следующие немного абзацев обсуждают эффекты сокращения блокировки раздела для различных операторов MySQL на таблицах, используя механизмы хранения, которые используют блокировки на уровне таблицы.
SELECT
операторы (включая тех, которые содержат объединения или соединения),
блокируют только те разделы, которые фактически должны быть считаны. Это также применяется к SELECT ... PARTITION
.
UPDATE
сокращает блокировки только для таблиц, на которых не обновляются никакие столбцы разделения.
REPLACE
и INSERT
заблокируйте только те разделы, имеющие строки, которые будут вставлены
или заменены. Однако, если AUTO_INCREMENT
значение сгенерировано для любого столбца
разделения тогда, все разделы блокируются.
INSERT ... ON DUPLICATE KEY
UPDATE
сокращается, пока никакой столбец разделения не обновляется.
INSERT ... SELECT
блокировки только те разделы в исходной таблице, которая должна
быть считана, хотя все разделы в целевой таблице блокируются.
Блокировки, наложенные LOAD DATA
операторы на разделенных таблицах не могут быть сокращены.
Присутствие BEFORE INSERT
или BEFORE UPDATE
триггеры
используя любой столбец разделения разделенной таблицы означают, что это соединяется INSERT
и UPDATE
операторы, обновляющие эту таблицу, не могут быть сокращены, так как
триггер может изменить свои значения: A BEFORE INSERT
включите любое из средств
столбцов разделения таблицы что блокировки, установленные INSERT
или REPLACE
не может быть сокращен, начиная с BEFORE
INSERT
триггер может изменить столбцы разделения строки прежде, чем строка будет вставлена, вызывая
строку в различный раздел, чем это было бы иначе. A BEFORE UPDATE
включите средства
столбца разделения что блокировки, наложенные UPDATE
или INSERT
... ON DUPLICATE KEY UPDATE
не может быть сокращен.
CREATE
VIEW
не вызывает блокировок.
ALTER TABLE ... EXCHANGE
PARTITION
сокращает блокировки; только обмененная таблица и обмененный раздел блокируются.
ALTER TABLE ... TRUNCATE
PARTITION
сокращает блокировки; только разделы, которые будут освобождены, блокируются.
Кроме того, ALTER TABLE
операторы берут метаданные, соединяет табличный уровень.
LOCK TABLES
не может сократить блокировки раздела.
CALL
stored_procedure(
поддерживает сокращение блокировки,
но оценку expr
)expr
не делает.
DO
и SET
операторы не поддерживают сокращение блокировки разделения.