我在带有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
但它并没有改变任何事情。我基本上都在抓稻草。
答案 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
?ALTER TABLE .. ADD INDEX .. ALGORITHM=INPLACE
,这对于这么小的备用空间是必需的。