小编Ovi*_*vid的帖子

"SELECT COUNT(*)"很慢,即使使用where子句也是如此

我试图弄清楚如何在MySQL中优化一个非常慢的查询(我没有设计这个):

SELECT COUNT(*) FROM change_event me WHERE change_event_id > '1212281603783391';
+----------+
| COUNT(*) |
+----------+
|  3224022 |
+----------+
1 row in set (1 min 0.16 sec)
Run Code Online (Sandbox Code Playgroud)

将其与完整计数进行比较:

select count(*) from change_event;
+----------+
| count(*) |
+----------+
|  6069102 |
+----------+
1 row in set (4.21 sec)
Run Code Online (Sandbox Code Playgroud)

解释声明对我没有帮助:

 explain SELECT COUNT(*) FROM change_event me WHERE change_event_id > '1212281603783391'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: me
         type: range
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 4120213 …
Run Code Online (Sandbox Code Playgroud)

mysql optimization performance

43
推荐指数
3
解决办法
6万
查看次数

如何在不同的堆栈框架中本地化Perl变量?

我有一些自动生成的代码,可以在一些代码中的一些不同的地方有效地写出以下内容:

no warnings 'uninitialized';
local %ENV = %ENV;
local $/   = $/;
local @INC = @INC;
local %INC = %INC;
local $_   = $_;
local $|   = $|;
local %SIG = %SIG;
use warnings 'uninitialized';
Run Code Online (Sandbox Code Playgroud)

当自动生成代码时,有些人认为代码并不是绝对必要的"漂亮",但是我想把它拉到子程序中.但是,这将在该子例程中本地化这些变量.有没有办法在调用堆栈框架中本地化这些变量?

更新:以类似的方式,能够在更高的堆栈帧中运行eval会很好.我认为Python已经有了这个.如果Perl也这样做会很好.

perl scope local

24
推荐指数
2
解决办法
1055
查看次数

Spreadsheet :: ParseExcel :: Stream丢失了解析器

我有一个18M Excel电子表格来解析并且Spreadsheet::ParseExcel消耗了大量内存,我不得不切换到Spreadsheet :: ParseExcel :: Stream.它在我的VM上工作正常,它在我们的登台服务器上工作正常,但在我们的生产服务器上(配置方式相同),我收到此错误:

Can't call method "transfer" on an undefined value at \
lib/Spreadsheet/ParseExcel/Stream/XLS.pm line 31.
Run Code Online (Sandbox Code Playgroud)

这来自以下代码:

my ($wb, $idx, $row, $col, $cell);
my $tmp = my $handler = sub {
  ($wb, $idx, $row, $col, $cell) = @_;
  $parser->transfer($main);  XXX here's where we die
};

my $tmp_p = $parser = Coro::State->new(sub {
  $xls->Parse($file);
  # Flag the generator that we're done
  undef $xls;
  # If we don't transfer back when done parsing,
  # it's …
Run Code Online (Sandbox Code Playgroud)

excel perl

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

你需要从测试工具中得到什么?

我是参与Test Anything Protocol(TAP)IETF小组的人之一(如果有兴趣,请随时加入邮件列表).许多编程语言开始采用TAP作为他们的主要测试协议,他们比我们目前提供的更多.因此,我们希望从具有xUnit,TestNG或任何其他测试框架/方法背景的人那里获得反馈.

基本上,除了简单的通过/失败,您需要从测试工具中获得哪些信息?只是给你一些例子:

  • 文件名和行号(如果适用)
  • 开始和结束时间
  • 诊断输出,例如你得到的和你期望的差异.

等等 ...

testing testng unit-testing tap xunit

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

使用RelaxNG进行XML模式验证

您可以针对性能和准确性推荐哪些XML验证工具,每个工具都是我们系统的关键问题?我们有以下要求:

  • 不是 xmllint(见下文)
  • 支持RelaxNG
  • 可以轻松地与Perl集成(这是可选的,但它会很好)

为什么不用xmllint?(这是背景,你可以跳过它,如果你愿意)

我们有一个大型的Perl系统,它使用RelaxNG来验证我们的XML.我们使用紧凑的RelaxNG格式trang将其转换为标准的RelaxNG格式.然后我们通过xmllint进行实际验证.

这就是问题出现的时候.xmllint经常会错误地报告验证错误.它不会给出误报或否定,但如果文档无法验证,xmllint通常会报告给定错误的错误元素或属性.有时错误是正确的("不希望看到元素'bar'),但仅仅是因为没有报告先前的错误(因为'bar'应该遵循必需但缺少的元素'foo',但xmllint不会'请告诉我们这一点.请注意,这是xmllint长期存在的问题,即使是最新版本也存在同样的问题.我们经常会收到大量的XML文档,错误地报告错误会给客户和开发人员带来很大的麻烦.

xml validation perl schema relaxng

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

REST:正确的HTTP响应代码,用于忽略的POST

我们有一个REST API,客户端通常会POST和PUT数据.当他们这样做时,有时他们POST数据导致我们的系统没有变化.POST和PUT格式正确,但是他们发送的数据与我们数据库中的数据完全相同.当发生这种情况时,我发现我们正在返回400 HTTP状态.不幸的是,这意味着"不良请求",因为"由于语法格式错误,服务器无法理解请求".

显然情况并非如此,但我被告知我们将使用它,因为没有其他适当的状态代码.我们考虑过的选择:

  • 304未修改.遗憾的是,这仅适用于GET请求.
  • 204没有内容.似乎很接近,但禁止实体.

其他选择似乎同样糟糕.我们可能会200 OK在我们返回的XML文档中使用并获得相关信息,但这似乎不是"RESTish".REST世界通常如何处理这个问题?

(修正未修改的响应代码.感谢Mkoeller)

rest http http-headers

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

使用物化路径对树进行排序?

我在表格中有一个树形结构,它使用物化路径让我快速找到孩子.但是,我还需要对结果进行深度优先排序,正如人们对线程论坛回复所期望的那样.

 id | parent_id | matpath |          created           
----+-----------+---------+----------------------------
  2 |         1 | 1       | 2010-05-08 15:18:37.987544
  3 |         1 | 1       | 2010-05-08 17:38:14.125377
  4 |         1 | 1       | 2010-05-08 17:38:57.26743
  5 |         1 | 1       | 2010-05-08 17:43:28.211708
  7 |         1 | 1       | 2010-05-08 18:18:11.849735
  6 |         2 | 1.2     | 2010-05-08 17:50:43.288759
  9 |         5 | 1.5     | 2010-05-09 14:02:43.818646
  8 |         6 | 1.2.6   | 2010-05-09 14:01:17.632695
Run Code Online (Sandbox Code Playgroud)

所以最终的结果实际上应该像这样排序:

 id | parent_id | matpath | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql materialized-path-pattern

14
推荐指数
4
解决办法
1万
查看次数

"git pull"坏了

我最近将我的MacBook Pro升级为Snow Leopard并且"git pull"返回:

rakudo $ git pull
git: 'pull' is not a git-command. See 'git --help'

Did you mean this?
        shell
rakudo $ git-pull
-bash: git-pull: command not found
Run Code Online (Sandbox Code Playgroud)

我试过通过macports重新安装,但无济于事.然后我看到了这个

rakudo $ git --exec-path
/Users/ovid/libexec/git-core
Run Code Online (Sandbox Code Playgroud)

这令我感到惊讶,因为该目录不存在,也不存在.谷歌没有帮助.希望你能:)

git macos osx-snow-leopard

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

对Perl更好的卡方检验?

假设我掷了6个骰子60次,我分别得到16,5,9,7,6,15个数字1到6.数字1和6显示太多,并且只有1.8%的可能性是随机的.如果我使用Statistics :: ChiSquare,它会输出:

There's a >1% chance, and a <5% chance, that this data is random.
Run Code Online (Sandbox Code Playgroud)

因此,它不仅是一个糟糕的接口(我不能直接得到这些数字),但舍入误差很大.

更糟糕的是,如果我掷出两个六面骰子怎么办?获得任何特定数字的几率是:

Sum Frequency   Relative Frequency 
2   1           1/36 
3   2           2/36                                                                                                                                                                                                               
4   3           3/36
5   4           4/36
6   5           5/36
7   6           6/36
8   5           5/36
9   4           4/36
10  3           3/36
11  2           2/36
12  1           1/36
Run Code Online (Sandbox Code Playgroud)

Statistics :: ChiSquare曾经有一个chisquare_nonuniform()函数,但它被删除了.

所以数字很差,我不能用它来进行非均匀分布.给出一个实际频率列表和预期频率列表,在Perl中计算卡方检验的最佳方法是什么?我在CPAN上找到的各种模块都没有帮助我,所以我猜我错过了一些明显的东西.

statistics perl

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

如何获取创建Perl子例程引用的文件和行号?

给定子例程引用,有没有办法找出声明子例程的文件和行号?警告和朋友似乎做对了,但我需要外部.这是我的测试程序:

#!/usr/bin/perl -l

use strict;
use warnings;
use B;

# line 99 'bin/some_code.pl'
{
    no strict 'refs';
    print B::svref_2object(\*{'Foo::some_sub'})->LINE;
    print B::svref_2object(\&Foo::some_sub)->GV->LINE;
}
Foo::some_sub();

package Foo;
# line 23 'bin/some_file.pl'
sub some_sub {
    warn "Got to here";
}
Run Code Online (Sandbox Code Playgroud)

那输出:

102
102
Got to here at 'bin/some_file.pl' line 24.
Run Code Online (Sandbox Code Playgroud)

线路信息不是我所期望的,所以我假设我做错了(B :: GV有一个相应的FILE方法,但是直到我让LINE工作,它对我来说没用多少).

是否有其他方法来获取此信息,我在上面的代码中做错了什么?

更新:事实证明,如果我没有使用行指令,'FILE'和'LINE'方法似乎工作正常.看起来它可能是B :: GV模块中的错误.

perl

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