- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在努力减少我创建的程序的运行时间。
我使用了 Profiler,它告诉我 63% 的时间花在了 DB::st::execute 上。然后我运行了一个 DBI Profiler,并发现我的哪个调用花费的时间最长:
+ 1 SELECT Gene FROM genotypegene WHERE Genotype like ?
= 754 0.163602352142334 0 0 0.0156009197235107 1332756184.24322 1332756184.74384
我将调用次数从 754 次更改为 14 次:
+ 1 SELECT Gene FROM genotypegene WHERE Genotype like ?
= 14 0.00399994850158691 0 0 0.00100016593933105 1332923220.99416 1332923221.70477
但是程序速度并没有显着提高,我的分析器现在说 100% 花在了 DBI::common::FETCH 上。我不确定这是指什么方法。
在我编辑我的程序以减少“SELECT Gene”的调用次数之前,它说 DBI::common::FETCH 需要 0.000003 秒/调用,而现在它需要 4.467... 秒/调用。为什么 DBI::common::FETCH 现在比以前花费更长的秒/调用时间? (我在两个配置文件之间注意到的唯一另一件事是原始配置文件有一个新配置文件不再有的调用。如果我在程序运行时查看配置文件,它只有一个调用,但这会增加在程序运行时及时)
谢谢!
编辑:这是我从中选择的表格(放在这里比评论部分更容易阅读):
CREATE TABLE genotypegene
(
Genotype VARCHAR(20),
Gene VARCHAR(20),
FOREIGN KEY (Genotype) REFERENCES genotype(Genotype),
FOREIGN KEY (Gene) REFERENCES gene(Gene)
)ENGINE=InnoDB;
编辑 2:
DBI 配置文件的字段位于此处:http://metacpan.org/pod/DBI::Profile#Report-Format
我能够从 700~ 升到 14 的原因是因为我作为程序员缺乏经验(自学,3 个月前才开始使用 perl)。我最初是在每次需要时从数据库中调用信息(因此多次调用相同的信息)。一旦我发现这会减慢程序速度,我就对其进行了更改,以便它在程序开始时调用我需要的信息,然后将其存储在哈希中。然后我期待这会加快程序的速度,它确实如此,但没有预期的那么快。这就是为什么我对 DBI::common::Fetch 的 4.4 秒感到惊讶,因为它以前从来没有这么慢,而且据我所知,我没有更改程序中的任何应该使这个调用这么慢的东西
这是 Devel Profile对于经过编辑的程序:
%Time Sec. #calls sec/call F name
100.00 386198925.3409 86442494 4.467698 DBI::common::FETCH
0.00 15263.1450 21928855 0.000696 DBI::st::execute
(还列出了很多其他功能,只是选择了感兴趣的)
这是编辑前的样子:
%Time Sec. #calls sec/call F name
65.01 8767.3435 21766318 0.000403 DBI::st::execute
2.29 309.2408 86510899 0.000004 DBI::common::FETCH
11.52 1554.1823 0 1554.182323 * <other>
(65% 和 63% 之间的差异是因为这个程序的运行与我一开始提到的不同,但大致相同)
最佳答案
在看到您的数据库设计后,我会根据您的查询提出两点建议。
i) 您正在使用 LIKE 查询来匹配字符串,因此在您的 GENOTYPE 列上创建一个 INDEX,这将提高性能。
ii) 根据您在列字符串上进行的匹配类型,尝试在 GENOTYPE 列上使用 MyIsam 引擎和 FULL TEXT 引擎。
您的查询是否像:
a) SELECT Gene FROM genotypegene WHERE Genotype like 'YYY%'(以 开头)
或
b) SELECT Gene FROM genotypegene WHERE Genotype like '%YY%'(包含 )
请分享一个确切的查询,这将有助于更多。
关于mysql - 减少 DBI::common::Fetch 的调用 (Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903952/
我在我的应用程序中使用 JDBI 和 Dropwizard。我已经使用 dbi.open 命令获取了一个 DAO 实例,然后使用它来运行各种查询。在“finally” block 中,我使用 dao.
我有一个在 eval 中运行的数据库查询,以捕获错误。问题是错误消息正在输出到控制台,即使它被困住了。如何阻止错误消息执行此操作,因为我想自己解析它并吐回我自己的消息? my $dbh = DBI->
这是我使用 DBI 的示例代码: db = DBI.connect("DBI:Mysql:database=testdatabase;host=testhost;port=30012", "testu
使用: MySQL 5.5ActivePerl v5.14.1Windows 7 64 位 以下脚本在执行调用失败时有一个未定义的 $DBI::errstr: #!c:/perl/bin/perl.e
这是整个错误 SCREAM: Error suppression ignored for ( ! ) Fatal error: Maximum execution time of 30 seconds
在Perl中捕获任何DBI错误的最佳方法是什么?例如,如果由于插入的值中包含非法字符而导致插入失败,那么如何使脚本不失败,但是如何捕获错误并进行适当处理。 我不想做“死”,因为我不想停止脚本的执行。
在工作中,我们有一个 DBA,他说他的 RAC 工作得很好,但事实并非如此。像 Toad 或 SQL Developer 这样的 SQL IDE 会随机断开它们的连接(我怀疑是因为 RAC 的网络设置
所以我有这个非常简化的片段: @cmd_arry = ("Bob Newhart", "54"); $sqlCmd = "UPDATE foobar SET name = ?, age = ?"; $
除了使用标准代码模具“无法连接:$ DBI::errstr\n”来处理错误之外,是否可以编写如下的自定义代码? 标准: $dbstore = DBI->connect($dsn, $user, $pw
假设我正在查询一个类似于以下内容的表: $dbh->selectrow_hashref('SELECT id, name FROM foos WHERE name = "bar"'); 当然,id将是
我在长时间运行的 perl 脚本中遇到了一些内存泄漏问题,其中 perl 占用的内存量继续增长。因此,我尝试使用 Devel::Leak追踪泄漏。我发现每当我调用 DBI的prepare方法,Deve
我想从表中复制一条记录,修改记录中的一些字段并插入到同一个表中。该表有 90 列。 考虑在一个语句中使用 insert..select 但有 90 列,我需要在选择查询中告诉列名。我怎样才能在 per
我有这个查询 select * from table where ID in (1,2,3,5...) 如何使用占位符使用 DBI 构建此查询? 例如 : my @list = (1, 2, 3, 4
如何使用 perl 和 fbi 针对 sql server 检索存储过程的返回值?有人可以举个例子吗? 最佳答案 DBD::ODBC t/dir 中有示例(参见 20SqlServer.t)。基本上你
实际上我已经执行了postgres查询,假设它返回了10行。现在我有了语句处理程序( $sth )。 print Dumper $sth->fetchrow_arrayref; print Dumpe
我想让 perl 在我自己的路径中使用 DBI 模块(假设,/home/users/zdd/perl5/lib/DBI),但是系统也有一个 DBI 模块,它是/usr/lib/perl5/库/DBI。
实际上我已经执行了postgres查询,假设它返回了10行。现在我有了语句处理程序( $sth )。 print Dumper $sth->fetchrow_arrayref; print Dumpe
我不熟悉在 perl 脚本中使用 DBI 进行 SQL 查询。我遇到的问题与具有正斜杠的字段中的数据有关。我想使用变量作为 where 子句的输入,但它正在做 DBI 打算用正斜杠做的事情:停止查询。
假设我有一个连接到数据库的子例程。然后我想进行查询并接收输出并对其进行处理,当然,但是如果查询无效怎么办? 所以让我们假设我有类似的东西: $dbh = DBI->connect(, , ); $qu
我正在使用 Perl 的 DBI 进行 postgreSQL 访问,我注意到当我有多个并发进程准备同一个查询时,它们似乎在服务器上以相同的准备语句名称结束,从而产生了冲突。 2014-02-10 10
我是一名优秀的程序员,十分优秀!