mysql - 是否有等效的 EXPLAIN 可以在 ALTER TABLE 查询之前工作?

标签 mysql sql performance indexing

看起来 MySQL EXPLAIN 前缀只在某些查询前面起作用。 是否有相当于 EXPLAIN 的功能可以在 ALTER TABLE 查询之前使用?

我很想知道我计划的 ALTER TABLE 语句可能需要多长时间。

背景:我有一个别人提供的表,其中包含 300 列数据。我知道我只需要使用其中的一些列,并且为了找出我需要哪些列,我计划对几个关键字进行全文搜索。但为了做到这一点,我需要添加全文索引。由于我对这种规模的数据集不熟悉,因此我不完全确定这是一个现实的计划。我希望像 EXPLAIN 这样的东西(或者更可能的是,这个线程中的替代工具)可以帮助确定这一点。

<小时/>

编辑:在回答下面的几个问题时,我应该提到该表大约有 400 万行,并且位于本地测试机器上。因此,如果需要的话,我可以只是盲目地运行这个东西。如果可能的话,我只是不喜欢。感谢迄今为止提供的所有好信息。

最佳答案

大多数“更改表”都会触发复制到临时表操作,它将使用新架构创建临时表,然后锁定表,将数据从旧表复制到新表,然后重命名,删除旧表。

所以消耗的大部分时间是复制到临时表,这取决于该表有多大(如果服务器有足够的内存)。使用show table status查看表有多大(data_length+index_length),在其他表上采样以了解您的mysql服务器上的传输速度,然后您可以估计需要多长时间。

mysql文档中提到了关于DML解释的另一种方法,但我没有得到结果,可能还没有完成:

http://dev.mysql.com/doc/refman/5.6/en/explain.html

从 MySQL 5.6.3 开始,EXPLAIN 允许的可解释语句包括 SELECT、DELETE、INSERT、REPLACE 和 UPDATE。在 MySQL 5.6.3 之前,SELECT 是唯一可解释的语句。

关于mysql - 是否有等效的 EXPLAIN 可以在 ALTER TABLE 查询之前工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639384/

相关文章:

mysql - 使用过滤从另一个表更新记录

sql - oracle过程返回整数

java - 如何使用 JDBC 根据多个条件过滤数据库记录?

python - 什么决定了调试器的运行时性能

php - 虽然每个都已弃用,但 Foreach 替换需要更多时间

mysql - 单个查询中的多个 in select 语句

php - 将 xml 提要导入 MySQL 数据库时替换特殊字符

MySQL:在同一列上有 AND 条件

mysql - 创建具有相对日期的 MYSQL 查询

mysql - 用于查找与一组类别匹配的产品的 SQL 查询