在CREATE INDEX期间丢失与MySQL服务器的连接

时间:2017-11-08 14:08:59

标签: mysql indexing

我在带有16 GB内存和1 TB SSD驱动器的Mac Mini 10.11.2中运行MySQL 5.7.10,可用空间为160 GB。

有一张包含12亿条记录的表格,总计约400 GB。它可以正常工作,收集数据一年。但现在我需要一个新的综合指数。

使用integer(int64)命令行实用程序:

iso_fortran_env

但是,我是在本地,本地,本地mysql会话,白天,晚上,还是在听耐心 Guns n&#39时运行它;玫瑰,迟早会一直失败:

CREATE INDEX composite_IDX USING BTREE ON db.stats (foo,bar(2),baz,quux,fum,shme);

这条消息并没有告诉我很多。为什么我不能创建这个索引?我该怎么办?

我尝试向screen添加荒谬的超时:

ERROR 2013 (HY000): Lost connection to MySQL server during query

但它并没有改变任何事情。我基本上都在抓稻草。

2 个答案:

答案 0 :(得分:0)

你有这个索引的前缀吗?如果是这样,create语句如果是非唯一索引且前缀超过最大列数据类型大小,则可能会出错。

您正在创建表类型支持的索引,是吗?例如,只有InnoDB和MyISAM表支持FULLTEXT索引。

以下是文档的链接:https://dev.mysql.com/doc/refman/5.7/en/create-index.html

但是,可能需要将太多的表读入内存/加载到临时存储中,以便服务器创建复合索引。您只有160 Gb的可用空间,但您的表大小为400Gb,并且您在6列上创建索引。拥有12亿条记录,您正在寻找72亿个单独的领域。我想知道它是临时存储问题还是RAM问题。

答案 1 :(得分:0)

它死了也一样。前缀(例如bar(2))可防止在索引之后使用列。因此,索引不会像你想象的那样有用。所以,让我们看看它应该提供帮助的查询,让我们看看SHOW CREATE TABLE。然后我们可以专注于寻找更好的指数。 (开始一个新问题。)

...同时

  • 让可用磁盘空间缩小到最大表的大小以下是不明智的。
  • 我希望您使用的是innodb_file_per_table
  • 5.7有ALTER TABLE .. ADD INDEX .. ALGORITHM=INPLACE,这对于这么小的备用空间是必需的。
  • 重新启动mysqld之前,超时不会生效。