OT:
Kod:
#!/usr/local/bin/perl -w
use DBI;
require ("database_login.pl");
my $blah = subnet_connect();
my $dbh = $$blah;
######
my ($sql,$sth,$sql2,$sth2,$t1,$t2,$t3,$t4,$iters);
$iters = 100000;
$sql = 'SELECT SQL_NO_CACHE COUNT(*) FROM article';
$sth = $dbh->prepare($sql);
$t1 = time();
for($i=0;$i<$iters;$i++) {
$sth->execute();
}
$t2 = time();
$sth->finish();
$sql2 = 'SELECT SQL_NO_CACHE COUNT(id) FROM article';
$sth = $dbh->prepare($sql2);
$t3 = time();
for($i=0;$i<$iters;$i++) {
$sth->execute();
}
$t4 = time();
$sth->finish();
print "COUNT(*) " . ($t2-$t1) . " seconds\n";
print "COUNT(id) " . ($t4-$t3) . " seconds\n";
$dbh->disconnect();
Tabellen har ca 1 miljon rader och har ett par rätt stora fält.
Körningar (3):
Kod:
COUNT(*) 10.6 seconds
COUNT(id) 11 seconds
Testade även att selecta * mot att selecta alla fält. Här körde jag en LIMIT 100 iom att bandbredden blir en flaskhals annars. 1000 iterationer. 4 körningar
Kod:
* 5 seconds
fält 5.8 seconds
Vid en första anblick ser detta försumbart ut, dock blir siffrorna annorlunda när man tittar närmare på dem.
100,000 frågor på en tabell med 1,000,000 rader ger en diff på ungefär 3,6% (om jag kommer ihåg min lågstadiematte rätt).
I fallet med SELECT är skillnaden större, nämligen 13,8% med 1000 iterationer över 100 rader (den här växer då rätt snabbt till en betydande skillnad).