table_types.pl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/bin/perl
  2. #
  3. use DBI;
  4. use Benchmark;
  5. $opt_loop_count=100000; # number of rows/3
  6. $small_loop_count=10; # Loop for full table retrieval
  7. $range_loop_count=$small_loop_count*50;
  8. $many_keys_loop_count=$opt_loop_count;
  9. chomp($pwd = `pwd`); $pwd = "." if ($pwd eq '');
  10. require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!n";
  11. if ($opt_loop_count < 256)
  12. {
  13.   $opt_loop_count=256; # Some tests must have some data to work!
  14. }
  15. if ($opt_small_test)
  16. {
  17.   $opt_loop_count/=100;
  18.   $range_loop_count/=10;
  19.   $many_keys_loop_count=$opt_loop_count/10;
  20. }
  21. elsif ($opt_small_tables)
  22. {
  23.   $opt_loop_count=10000; # number of rows/3
  24.   $many_keys_loop_count=$opt_loop_count;
  25. }
  26. elsif ($opt_small_key_tables)
  27. {
  28.   $many_keys_loop_count/=10;
  29. }
  30. print "Testing the speed difference between some table typesn";
  31. ####
  32. #### Generating random keys
  33. ####
  34. print "Generating random keysn";
  35. $random[$opt_loop_count]=0;
  36. for ($i=0 ; $i < $opt_loop_count ; $i++)
  37. {
  38.   $random[$i]=$i+$opt_loop_count;
  39. }
  40. my $tmpvar=1;
  41. for ($i=0 ; $i < $opt_loop_count ; $i++)
  42. {
  43.   $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count);
  44.   $swap=$tmpvar % $opt_loop_count;
  45.   $tmp=$random[$i]; $random[$i]=$random[$swap]; $random[$swap]=$tmp;
  46. }
  47. $total_rows=$opt_loop_count*3;
  48. ####
  49. ####  Connect and start timeing
  50. ####
  51. $start_time=new Benchmark;
  52. $dbh = $server->connect();
  53. ####
  54. #### Create needed tables
  55. ####
  56. $table_name="bench1";
  57. <<<<<<< table_types.pl
  58. ||||||| 1.2
  59. test("n","type=isam","char"); test("m","type=myisam pack_keys=1","char"); exit(1);
  60. =======
  61. >>>>>>> /tmp/T4a17019
  62. test($table_name,"type=isam","char");
  63. test($table_name,"type=myisam pack_keys=0","char");
  64. test($table_name,"type=myisam pack_keys=0","char");
  65. test($table_name,"type=myisam pack_keys=0 checksum=1","char");
  66. test($table_name,"type=myisam pack_keys=1","char");
  67. test($table_name,"type=isam","varchar");
  68. test($table_name,"type=myisam pack_keys=1","varchar");
  69. test($table_name,"type=myisam pack_keys=0","varchar");
  70. test($table_name,"type=myisam pack_keys=0 checksum=1","varchar");
  71. #test("type=heap","char"); # The default table sizes is a bit big for this one
  72. $dbh->disconnect;
  73. exit (0);
  74. sub test {
  75.   my ($name,$options,$chartype)=@_;
  76.   
  77.   print "nTesting with options: '$options'n";
  78.   $dbh->do("drop table $name");
  79.   do_many($dbh,$server->create("$name",
  80.        ["id int NOT NULL",
  81. "id2 int NOT NULL",
  82. "id3 int NOT NULL",
  83. "dummy1 $chartype(30)"],
  84.        ["primary key (id,id2)",
  85. "index index_id3 (id3)"],
  86.       $options));
  87.   
  88.   if ($opt_lock_tables)
  89.   {
  90.     $sth = $dbh->do("LOCK TABLES $name WRITE") || die $DBI::errstr;
  91.   }
  92.   
  93.   if ($opt_fast && defined($server->{vacuum}))
  94.   {
  95.     $server->vacuum($dbh,1);
  96.   }
  97.   
  98.   ####
  99.   #### Insert $total_rows records in order, in reverse order and random.
  100.   ####
  101.   
  102.   $loop_time=new Benchmark;
  103.   
  104.   if ($opt_fast_insert)
  105.   {
  106.     $query="insert into $name values ";
  107.   }
  108.   else
  109.   {
  110.     $query="insert into $name (id,id2,id3,dummy1) values ";
  111.   }
  112.   
  113.   if (($opt_fast || $opt_fast_insert) && $limits->{'multi_value_insert'})
  114.   {
  115.     $query_size=$server->{'limits'}->{'query_size'};
  116.     
  117.     print "Inserting $opt_loop_count multiple-value rows in ordern";
  118.     $res=$query;
  119.     for ($i=0 ; $i < $opt_loop_count ; $i++)
  120.     {
  121.       $tmp= "($i,$i,$i,'ABCDEFGHIJ'),";
  122.       if (length($tmp)+length($res) < $query_size)
  123.       {
  124. $res.= $tmp;
  125.       }
  126.       else
  127.       {
  128. $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr;
  129. $res=$query . $tmp;
  130.       }
  131.     }
  132.     print "Inserting $opt_loop_count multiple-value rows in reverse ordern";
  133.     for ($i=0 ; $i < $opt_loop_count ; $i++)
  134.     {
  135.       $tmp= "(" . ($total_rows-1-$i) . "," .($total_rows-1-$i) .
  136. "," .($total_rows-1-$i) . ",'BCDEFGHIJK'),";
  137.       if (length($tmp)+length($res) < $query_size)
  138.       {
  139. $res.= $tmp;
  140.       }
  141.       else
  142.       {
  143. $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr;
  144. $res=$query . $tmp;
  145.       }
  146.     }
  147.     print "Inserting $opt_loop_count multiple-value rows in random ordern";
  148.     for ($i=0 ; $i < $opt_loop_count ; $i++)
  149.     {
  150.       $tmp= "(" . $random[$i] . "," . $random[$i] . "," . $random[$i] .
  151. ",'CDEFGHIJKL')," or die $DBI::errstr;
  152.       if (length($tmp)+length($res) < $query_size)
  153.       {
  154. $res.= $tmp;
  155.       }
  156.       else
  157.       {
  158. $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr;
  159. $res=$query . $tmp;
  160.       }
  161.     }
  162.     $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr;
  163.   }
  164.   else
  165.   {
  166.     print "Inserting $opt_loop_count rows in ordern";
  167.     for ($i=0 ; $i < $opt_loop_count ; $i++)
  168.     {
  169.       $sth = $dbh->do($query . "($i,$i,$i,'ABCDEFGHIJ')") or die $DBI::errstr;
  170.     }
  171.     
  172.     print "Inserting $opt_loop_count rows in reverse ordern";
  173.     for ($i=0 ; $i < $opt_loop_count ; $i++)
  174.     {
  175.       $sth = $dbh->do($query . "(" . ($total_rows-1-$i) . "," .
  176.       ($total_rows-1-$i) . "," .
  177.       ($total_rows-1-$i) . ",'BCDEFGHIJK')")
  178. or die $DBI::errstr;
  179.     }
  180.     
  181.     print "Inserting $opt_loop_count rows in random ordern";
  182.     
  183.     for ($i=0 ; $i < $opt_loop_count ; $i++)
  184.     {
  185.       $sth = $dbh->do($query . "(". $random[$i] . "," . $random[$i] .
  186.       "," . $random[$i] . ",'CDEFGHIJKL')") or die $DBI::errstr;
  187.     }
  188.   }
  189.   
  190.   $end_time=new Benchmark;
  191.   print "Time for insert (" . ($total_rows) . "): " .
  192.     timestr(timediff($end_time, $loop_time),"all") . "nn";
  193.   
  194.   if ($opt_fast && defined($server->{vacuum}))
  195.   {
  196.     $server->vacuum($dbh,1);
  197.   }
  198.   
  199.   $sth=$dbh->prepare("show table status like '$name'");
  200.   $sth->execute || die "Show table status returned error: $DBI::errstrn";
  201.   while (@row = $sth->fetchrow_array)
  202.   {
  203.     print join("|  ",@row) . " |n";
  204.   }
  205.   $dbh->do("drop table $name") if (!$opt_skip_delete);
  206. }