【问题标题】:MySQL Workbench : TroubleShooting KeysMySQL Workbench:故障排除键
【发布时间】:2018-09-06 09:35:37
【问题描述】:

我有一个php 脚本,可以创建一个大型临时 mysql 表。

创建此表需要花费大量时间(超过 30 分钟!)。所以我决定解决它。我确定问题出在Keys 的创建上。

我使用MySQL WorkBench 来做到这一点,现在我很难理解这句话:

/!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 /;
PRIMARY KEY (`CONC_ID`,`d_id_2`),
KEY `vo_marque_id` (`VM_id`),
KEY `CONC_ID` (`CONC_ID`,`d_id_2`)
/!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS /;

这是否意味着我有重复的 CONC_ID 密钥?或者我有一个指向它自己的Key

【问题讨论】:

  • 涉及多少行??
  • @scaisEdge 该表包含 ~50k 行
  • 更新您的问题并添加与您的问题相关的sql代码..(不仅仅是代码的一部分)

标签: mysql key mysql-workbench


【解决方案1】:
/!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 /;
  • /!40014 表示“只有在 MySQL 服务器版本至少为 4.0.14 时才执行此操作
  • SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKSforeign_key_checks 的当前值存储在变量 old_foreign_key_checks
  • 然后用FOREIGN_KEY_CHECKS=0 禁用外键检查

PRIMARY KEY (`CONC_ID`,`d_id_2`),
KEY `vo_marque_id` (`VM_id`),
KEY `CONC_ID` (`CONC_ID`,`d_id_2`)
  • 索引conc_id 是多余的,因为它与主键相同。您可以使用alter table <your_table> drop index conc_id; 安全地删除它

/!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS /;
  • 使用之前使用的变量恢复foreign_key_checks 的值。再次仅当版本大于 4.0.14 时

【讨论】:

  • 感谢您的回答 :) 只是一个问题,多余的索引(如我们示例中的 CONC_ID)会减慢表的创建速度吗?
  • 取决于您对“创造”的含义。只是创建表,不,用数据填充表会变慢,是的。但我认为不会那么重要。
猜你喜欢
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2010-11-30
  • 2021-09-11
  • 2012-02-18
  • 2011-03-07
  • 1970-01-01
相关资源
最近更新 更多