小编SAV*_*AFA的帖子

有什么方法可以减少 MySQL 数据库文件夹中的“FTS_*_*_INDEX_1.ibd”文件大小?

我有一个大型数据库,其中包含大约 240Gb 的数据和索引(从phpMyAdmin- 我的表位于 中读取innodb)。然而,服务器上的数据库文件夹大小接近 400Gb,而我的ibdata1文件大小约为 6Gb,导致 SSD 空间不足。

我调查了一下,似乎有很多文件,FTS_0000000000000f86_00000000000019db_INDEX_1.ibd大小有几十GB。它们看起来(根据它们的文件名)是我的关联表的全文索引,并且每个都有 6 个 (FTS_*_INDEX_1.ibdFTS_*_INDEX_6.ibd)。

我已经完成了搜索并发现了这些帖子:

Howto:清理 mysql InnoDB 存储引擎?

数据库空间与 ibdata1 大小不匹配

我已经在这两个问题/答案的评论中提出了我的问题,但尚未得到回复。所以我决定在这里直接问我的问题。

如果我启用“InnoDB Cleanup” innodb_file_per_table(如上面第一个链接中建议的那样),我还会有很多像FTS_\*_INDEX_1.ibd我的数据库文件夹一样的大文件吗?这种方法仅有助于减小ibdata1文件大小吗?经常OPTIMIZE TABLE在这些巨大的桌子上(按照建议)可以帮助我解决我的问题吗?

谢谢!

更新:

以下是大于 1Gb 的文件列表,按文件大小反向排序(文件名已更改):

-rw-rw----. 1 mysql mysql  1300234240 Jan 30 18:28 FTS_0000000000000fc2_DELETED.ibd
-rw-rw----. 1 mysql mysql  1375731712 Jan  7 21:41 FTS_0000000000000f86_00000000000019db_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  1585446912 Jan 30 23:17 FTS_0000000000001000_0000000000001a68_INDEX_1.ibd …
Run Code Online (Sandbox Code Playgroud)

mysql database innodb full-text-search

3
推荐指数
1
解决办法
7149
查看次数

使用正则表达式分解字符串

我有一个如下的字符串(示例中的字母可以是数字或文本,可以是大写或小写或两者。如果值是一个句子,则它应该位于单引号之间):

$string="a,b,c,(d,e,f),g,'h, i j.',k";
Run Code Online (Sandbox Code Playgroud)

我怎样才能将其分解以获得以下结果?

Array([0]=>"a",[1]=>"b",[2]=>"c",[3]=>"(d,e,f)",[4]=>"g",[5]=>"'h,i j'",[6]=>"k")
Run Code Online (Sandbox Code Playgroud)

我认为使用正则表达式将是一种快速且干净的解决方案。任何想法?

编辑: 这是我到目前为止所做的,对于括号之间有很长部分的字符串来说非常慢:

$separator="*"; // whatever which is not used in the string
$Pattern="'[^,]([^']+),([^']+)[^,]'";
while(ereg($Pattern,$String,$Regs)){
    $String=ereg_replace($Pattern,"'\\1$separator\\2'",$String);
}

$Pattern="\(([^(^']+),([^)^']+)\)";
while(ereg($Pattern,$String,$Regs)){
    $String=ereg_replace($Pattern,"(\\1$separator\\2)",$String);
}

return $String;
Run Code Online (Sandbox Code Playgroud)

这将替换括号之间的所有逗号。$separator然后我可以用逗号将其分解并用原始逗号替换。

php regex arrays explode

2
推荐指数
1
解决办法
6619
查看次数

标签 统计

arrays ×1

database ×1

explode ×1

full-text-search ×1

innodb ×1

mysql ×1

php ×1

regex ×1