导入期间禁用外键检查

pka*_*mol 3 mysql foreign-key import

我已经开始将巨大的(~800GB sql 转储)导入到mysql 5.5.

在某些时候,我意识到在导入数据库时​​,随着数据库大小的增加,进度开始减慢;

这清楚地表明,外键检查规模的增加可能会减慢这一过程;

我意识到我忘记禁用它们,我刚刚这样做了(在导入过程中);

所以我的问题是特定导入是否会从中受益,或者它将继续执行 FK 检查(在导入初始化中进行)

mysql> show variables like 'fo%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | ON    |
+--------------------+-------+
1 row in set (0.00 sec)

mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'fo%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | OFF   |
+--------------------+-------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

Aki*_*ina 11

命令

SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)

设置会话范围内变量的值。因此,它仅影响当前会话,不会影响其他会话,无论是已经运行的会话还是稍后将启动的会话。

如果使用以下命令将新值指定为全局范围值

SET GLOBAL FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)

然后将设置全局设置。它会影响当前会话和稍后启动的会话,并且不会影响已在运行的其他会话。

你可以在实践中看到它。

  • 启动 2 个 CLI (mysql.exe) 会话。
  • 检查所有窗口中的变量值。
  • 在第一个窗口中更改它。
  • 启动第三个窗口。
  • 检查所有窗口中的变量值。
  • 在第一个窗口中全局更改它。
  • 启动第四个窗口。
  • 检查所有窗口中的变量值。