我使用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; # ???
答案 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