MediaWiki  master
bench_delete_truncate.php
Go to the documentation of this file.
1 <?php
24 require_once __DIR__ . '/Benchmarker.php';
25 
28 
35  protected $defaultCount = 10;
36 
37  public function __construct() {
38  parent::__construct();
39  $this->addDescription( 'Benchmarks SQL DELETE vs SQL TRUNCATE.' );
40  }
41 
42  public function execute() {
43  $dbw = $this->getDB( DB_MASTER );
44 
45  $test = $dbw->tableName( 'test' );
46  $dbw->query( "CREATE TABLE IF NOT EXISTS /*_*/$test (
47  test_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
48  text varbinary(255) NOT NULL
49 );" );
50 
51  $this->bench( [
52  'Delete' => [
53  'setup' => function () use ( $dbw ) {
54  $this->insertData( $dbw );
55  },
56  'function' => function () use ( $dbw ) {
57  $this->delete( $dbw );
58  }
59  ],
60  'Truncate' => [
61  'setup' => function () use ( $dbw ) {
62  $this->insertData( $dbw );
63  },
64  'function' => function () use ( $dbw ) {
65  $this->truncate( $dbw );
66  }
67  ]
68  ] );
69 
70  $dbw->dropTable( 'test' );
71  }
72 
77  private function insertData( $dbw ) {
78  $range = range( 0, 1024 );
79  $data = [];
80  foreach ( $range as $r ) {
81  $data[] = [ 'text' => $r ];
82  }
83  $dbw->insert( 'test', $data, __METHOD__ );
84  }
85 
90  private function delete( $dbw ) {
91  $dbw->delete( 'text', '*', __METHOD__ );
92  }
93 
98  private function truncate( $dbw ) {
99  $test = $dbw->tableName( 'test' );
100  $dbw->query( "TRUNCATE TABLE $test" );
101  }
102 }
103 
104 $maintClass = BenchmarkDeleteTruncate::class;
105 require_once RUN_MAINTENANCE_IF_MAIN;
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
Maintenance script that benchmarks SQL DELETE vs SQL TRUNCATE.
const DB_MASTER
Definition: defines.php:26
bench(array $benchs)
Definition: Benchmarker.php:50
addDescription( $text)
Set the description text.
Base class for benchmark scripts.
Definition: Benchmarker.php:40
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.