如何在Perl,DBI中显示查询时间?

时间:2012-05-29 12:25:33

标签: mysql perl dbi

我使用Perl和DBI来管理我的MySQL表,查询等。如何显示查询的运行时间?

如果我在控制台中执行SELECT,结果将如下所示:

+-----+-------------+
| id  | name        |
+-----+--------------
|   1 | Jack        |
|   2 | Joe         |
|   3 | Mary        |
+-----+-------------+
3 rows in set (0.17 sec)

我需要展示0.17 sec。在DBI中有什么方法可以在Perl中显示运行时间,就像这样?

my $dbh = $db->prepare("SELECT id, name FROM names ORDER BY id;");
$dbh->execute;
print $dbh->runnin_time; # ???

4 个答案:

答案 0 :(得分:6)

在运行查询之前,您需要一个时间戳,以及之后的时间戳。不同之处在于查询执行时间。要获得高分辨率时间戳,请参阅Time::HiRes

答案 1 :(得分:6)

答案 2 :(得分:3)

我在DBI中找不到任何东西。我认为没有任何东西已经开箱即用,但可能是有趣的信息。

另一种方法是在执行之前和之后获得时间,然后做出一个简单的区别。您可以在Perl脚本中执行此操作,只需在查询执行之前获取时间戳,之后,然后减去两个以查找执行时间。

my $start = DateTime->now;
my $dbh = $db->prepare("SELECT id, name FROM names ORDER BY id;");
$dbh->execute;
my $end = DateTime->now;


my $elapsedtime = ($end->subtract_datetime($start))->seconds;
print "Execution time(seconds) : $elapsedtime \n";

答案 3 :(得分:1)

阅读@daxim的文档链接,有一种简单的方法可以通过运行DBI_PROFILE=2来自DBI::Profile

DBI::Profile: 53.203692s 50.67% (6725 calls) script.pl @ 2016-01-21 11:51:49 'INSERT INTO FOO ("BAR") VALUES (?)' => 0.057596s / 2 = 0.028798s avg (first 0.051621s, min 0.005975s, max 0.051621s) 'INSERT INTO BAZ ("QUX") VALUES (?)' => 0.367184s / 44 = 0.008345s avg (first 0.039410s, min 0.002445s, max 0.039410s) 来完成此操作

示例输出:

classList