我有一个相当大的InnoDB表,其中包含大约1000万行(并且计数,它预计将变为该大小的20倍).每一行都不是那么大(平均每个131 B),但我不得不删除一大块,这需要很长时间.这是表结构:
CREATE TABLE `problematic_table` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`taxid` int(10) unsigned NOT NULL,
`blastdb_path` varchar(255) NOT NULL,
`query` char(32) NOT NULL,
`target` int(10) unsigned NOT NULL,
`score` double NOT NULL,
`evalue` varchar(100) NOT NULL,
`log_evalue` double NOT NULL DEFAULT '-999',
`start` int(10) unsigned DEFAULT NULL,
`end` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `taxid` (`taxid`),
KEY `query` (`query`),
KEY `target` (`target`),
KEY `log_evalue` (`log_evalue`)
) ENGINE=InnoDB AUTO_INCREMENT=7888676 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
从表中删除大块的查询就像这样:
DELETE FROM problematic_table WHERE problematic_table.taxid …Run Code Online (Sandbox Code Playgroud) 我不确定这是否是定义的行为.我有以下代码:
use strict;
use warnings;
use Data::Dumper;
my $string = 'aaaaaa0aaaa';
my $char = substr($string, length($string), 1);
my $char2 = substr($string, length($string)+1, 1);
print Dumper($char);
print Dumper($char2);
Run Code Online (Sandbox Code Playgroud)
除了收到关于substr()字符串结尾的一个警告之外,我对输出感到困惑:
$VAR1 = '';
$VAR1 = undef;
Run Code Online (Sandbox Code Playgroud)
Perldoc说substr:
substr EXPR,OFFSET,LENGTH
如果OFFSET和LENGTH指定部分位于字符串外部的子字符串,则仅返回字符串中的部分.如果子字符串超出字符串的任何一端,则substr()返回未定义的值并产生警告.
双方length($string)并length($string) + 1超出字符串的(零索引)结束,所以我不知道为什么substr在一种情况下,返回空字符串undef中的其他.它是否与C用于字符串终止的NULL字符有关,并且substr在第一种情况下以某种方式返回,因此该字符串有一个"不可见"的最后一个字符,不计入length?我错过了一些明显的东西吗?
所以我将一个远程的空存储库添加到刚刚初始化的本地存储库中,并在提交本地更改之前犯了错误:
git init
git remote add origin <URL>
git add *
git pull origin master
Run Code Online (Sandbox Code Playgroud)
现在我的所有文件都已被删除,因为git将空的repo写入本地文件.
通常,当拉动时,如果存在需要提交的未分级的本地更改,则git拒绝合并.我很惊讶这与初始提交有所不同.
git log由于我从未提交本地更改,因此仅显示初始提交,因此我无法撤消使用的pull git reset --hard.有没有办法恢复我的文件,如果有,如何?
我已浏览了几个,他们都使用Perl模块的$$%,$$,$$$,@,$%,@..等在功能参数.
我知道$$在参数中确保您必须传递2个非可选参数和$1个非可选参数.其他人也有类似的含义吗?