小编mpe*_*mpe的帖子

如何在大型InnoDB表上提高DELETE FROM性能?

我有一个相当大的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)

mysql performance innodb

16
推荐指数
2
解决办法
3万
查看次数

为什么substr不会在字符串的末尾返回undef?

我不确定这是否是定义的行为.我有以下代码:

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)

Perldocsubstr:

substr EXPR,OFFSET,LENGTH

如果OFFSET和LENGTH指定部分位于字符串外部的子字符串,则仅返回字符串中的部分.如果子字符串超出字符串的任何一端,则substr()返回未定义的值并产生警告.

双方length($string)length($string) + 1超出字符串的(零索引)结束,所以我不知道为什么substr在一种情况下,返回空字符串undef中的其他.它是否与C用于字符串终止的NULL字符有关,并且substr在第一种情况下以某种方式返回,因此该字符串有一个"不可见"的最后一个字符,不计入length?我错过了一些明显的东西吗?

perl substr

9
推荐指数
2
解决办法
1162
查看次数

为什么前瞻(有时)比捕获更快?

这个问题的灵感来自另一个问题.

相比s/,(\d)/$1/s/,(?=\d)//:前者使用一个捕获组只更换数字而不是逗号,后者采用的是向前看,以确定是否逗号是一个数字得手.为什么后者有时会更快,如本回答所述

regex perl lookahead

7
推荐指数
1
解决办法
394
查看次数

如何在初始化后立即撤消空存储库中的拉?

所以我将一个远程的空存储库添加到刚刚初始化的本地存储库中,并在提交本地更改之前犯了错误:

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.有没有办法恢复我的文件,如果有,如何?

git

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

perl中的子例程参数

我已浏览了几个,他们都使用Perl模块的$$%,$$,$$$,@,$%,@..等在功能参数.

我知道$$在参数中确保您必须传递2个非可选参数和$1个非可选参数.其他人也有类似的含义吗?

perl

0
推荐指数
1
解决办法
87
查看次数

标签 统计

perl ×3

git ×1

innodb ×1

lookahead ×1

mysql ×1

performance ×1

regex ×1

substr ×1