WordPress.org

Make WordPress Core

Ticket #24498: 24498-test.php

File 24498-test.php, 2.8 KB (added by pento, 6 years ago)
Line 
1<?php
2
3$connections = array(
4                array(
5                        'host' => 'localhost',
6                        'port' => '3306',
7                        'user' => 'root',
8                        'pass' => 'root',
9                ),
10);
11
12$engines = array( 'myisam', 'innodb' );
13$row_counts = array( 100000, 1000000, 10000000 );
14$percent_underscores = array( 10, 30, 60, 90 );
15$unique_keys_count = array( 10, 100, 1000, 10000 );
16
17$queries = array(
18        'original' => "SELECT meta_key
19                FROM wp_postmeta
20                GROUP BY meta_key
21                HAVING meta_key NOT LIKE '\_%'
22                ORDER BY meta_key
23                LIMIT 30",
24        'range' => "SELECT DISTINCT meta_key FROM wp_postmeta
25                WHERE meta_key NOT BETWEEN '_' AND '_z'
26                HAVING meta_key NOT LIKE '\_%'
27                ORDER BY meta_key",
28        'notlike' => "SELECT DISTINCT meta_key
29                FROM wp_postmeta
30                WHERE meta_key NOT LIKE '\_%'
31                ORDER BY meta_key
32                LIMIT 30"
33);
34
35foreach ( $connections as $connection ) {
36        $dbh = new mysqli( $connection['host'], $connection['user'], $connection['pass'], null, $connection['port'] );
37        if ( $dbh->connect_error ) {
38                die( 'Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error );
39        }
40
41        foreach( $engines as $engine ) {
42                $dbh->query( "DROP DATABASE IF EXISTS 24498_test" );
43                $dbh->query( "CREATE DATABASE 24498_test" );
44                $dbh->query( "USE 24498_test" );
45                $dbh->query( "CREATE TABLE wp_postmeta (
46                        id BIGINT UNSIGNED AUTO_INCREMENT,
47                        meta_key varchar(255),
48                        PRIMARY KEY(id),
49                        KEY meta_key(meta_key(191))
50                ) ENGINE=$engine" );
51
52                $results = array();
53                foreach( $row_counts as $rows ) {
54                        $results[ $rows ] = array();
55                        foreach( $percent_underscores as $percent_underscore ) {
56                                $results[ $rows ][ $percent_underscore ] = array();
57                                foreach( $unique_keys_count as $unique_keys ) {
58                                        $results[ $rows ][ $percent_underscore ][ $unique_keys ] = array();
59                                        $keys = array();
60                                        for( $ii = 0; $ii < $unique_keys; $ii++ ) {
61                                                $keys[] = substr( str_shuffle( md5( microtime( true ) ) ), 0, 10 );
62                                        }
63
64                                        $values = array();
65                                        for( $ii = 0; $ii < $rows; $ii++ ) {
66                                                $underscore = rand( 0, 100 ) < $percent_underscore ? '_' : '';
67                                                $key = $underscore . $keys[ rand( 0, $unique_keys - 1 ) ];
68                                                $values[] = $key;
69                                        }
70                                        $values_string = "('" . implode( "'),('", $values ) . "')";
71                                        $dbh->query( "INSERT INTO wp_postmeta (meta_key) VALUES $values_string" );
72
73                                        foreach( $queries as $name => $query ) {
74                                                $results[ $rows ][ $percent_underscore ][ $unique_keys ][ $name ] = array();
75                                                for( $ii = 0; $ii < 100; $ii++ ) {
76                                                        $now = microtime( true );
77                                                        $dbh->query( $query );
78                                                        $results[ $rows ][ $percent_underscore ][ $unique_keys ][ $name ][] = microtime( true ) - $now;
79                                                }
80                                                rsort( $results[ $rows ][ $percent_underscore ][ $unique_keys ][ $name ] );
81                                                echo "$engine, $rows, $percent_underscore, $unique_keys, $name: " . $results[ $rows ][ $percent_underscore ][ $unique_keys ][ $name ][49] . "\n";
82                                        }
83
84                                        $dbh->query( "TRUNCATE TABLE wp_postmeta" );
85                                }
86                        }
87                }
88        }
89}