use strict; use DBI; my $dbh = DBI->connect('dbi:mysql:port=9306:host=127.0.0.1:database=test','root'); my @names = ('A','B','C','D','E'); my @sizes = ('0','1','10','100','1000'); foreach my $i (0..4) { gen_table ($names[$i], $sizes[$i]); } $dbh->do(" UPDATE B AS X LEFT JOIN C AS Y USING ( int_key ) SET Y . int_key = 10 WHERE Y . int_nokey > (SELECT 1 FROM (SELECT 1 FROM C AS X LEFT JOIN B AS Y USING ( pk ) ) AS Q LIMIT 1); "); sub gen_table { my ($name, $size) = @_; print localtime()." [$$] Creating table $name with $size rows.\n"; $dbh->do("DROP TABLE IF EXISTS $name"); $dbh->do(" CREATE TABLE $name ( pk INTEGER AUTO_INCREMENT, int_nokey INTEGER, int_key INTEGER, filler blob, PRIMARY KEY (pk), KEY (int_key) ) ENGINE=Innodb "); foreach my $row (1..$size) { my $rnd = int(rand($size)); $dbh->do(" INSERT INTO $name ( int_nokey, int_key ) VALUES ($rnd, $rnd) "); } }