Laravel 5 | Migration Alter-Change Column 花了很长时间
Laravel 5 | Migration Alter-Change Column took so long
在我的用户中table获得了数百万的数据.....
并且我执行此迁移以更改列 my_data
...
上的默认值
Schema::table('users', function (Blueprint $table) {
$table->string('my_data')->default(0)->change();
});
我在query_log.txt
中看到,php artisan migrate
会执行这个查询
ALTER TABLE gn_users CHANGE my_data my_data VARCHAR(255) DEFAULT '0' NOT NULL
这很慢,几乎 1 小时仍未完成迁移...
.
.
然后,我停止迁移,我直接 运行 原始查询(我使用 ALTER ... ALTER
而不是 ALTER ... CHANGE
)
ALTER TABLE gn_users ALTER my_data SET DEFAULT '0'
并且这个查询仅在几秒钟内完成...
.
.
所以,我的问题是,如何确保 Laravel 运行 ALTER ... ALTER
而不是 ALTER ... CHANGE
?
很可能是因为 Laravel 在 SQL 中使用的 CHANGE
命令主要用于重命名列、更改数据类型。
但是 ALTER
列在这种情况下更有用,因为它更适合设置或更改默认值。
(来源:https://hoelz.ro/ref/mysql-alter-table-alter-change-modify-column)
可能Laravel正在使用变化,因为它最适合变化,可以普遍使用,使用最广泛;通过文档搜索,不幸的是找不到强制 ALTER
命令而不是 CHANGE
.
的具体方法
为了确保正确的命令是 运行 并强制执行正确的命令,您始终可以使用 DB
facade 的方法执行原始查询 – DB::statement("ALTER db ALTER col...")
最好始终仔细检查构建者将要执行的命令 运行 以及这些命令是否对案例有效且有效,因为它们无法始终预测最佳方式,您的案例就是一个很好的例子。
在我的用户中table获得了数百万的数据.....
并且我执行此迁移以更改列 my_data
...
Schema::table('users', function (Blueprint $table) {
$table->string('my_data')->default(0)->change();
});
我在query_log.txt
中看到,php artisan migrate
会执行这个查询
ALTER TABLE gn_users CHANGE my_data my_data VARCHAR(255) DEFAULT '0' NOT NULL
这很慢,几乎 1 小时仍未完成迁移...
.
.
然后,我停止迁移,我直接 运行 原始查询(我使用 ALTER ... ALTER
而不是 ALTER ... CHANGE
)
ALTER TABLE gn_users ALTER my_data SET DEFAULT '0'
并且这个查询仅在几秒钟内完成...
.
.
所以,我的问题是,如何确保 Laravel 运行 ALTER ... ALTER
而不是 ALTER ... CHANGE
?
很可能是因为 Laravel 在 SQL 中使用的 CHANGE
命令主要用于重命名列、更改数据类型。
但是 ALTER
列在这种情况下更有用,因为它更适合设置或更改默认值。
(来源:https://hoelz.ro/ref/mysql-alter-table-alter-change-modify-column)
可能Laravel正在使用变化,因为它最适合变化,可以普遍使用,使用最广泛;通过文档搜索,不幸的是找不到强制 ALTER
命令而不是 CHANGE
.
为了确保正确的命令是 运行 并强制执行正确的命令,您始终可以使用 DB
facade 的方法执行原始查询 – DB::statement("ALTER db ALTER col...")
最好始终仔细检查构建者将要执行的命令 运行 以及这些命令是否对案例有效且有效,因为它们无法始终预测最佳方式,您的案例就是一个很好的例子。