Optimize and tune MySQL database performance
by querying the special information_schema
table
You can use mysqli multi_query to optimize all tables in a MySQL database: the entire query is grouped together using MySQL CONCAT and GROUP_CONCAT, and the result is saved in a variable.
This variable is then executed as a prepared statement.
MySQLi multi_query, optimize all MySQL tables
PHP example code:
<?php
/**
* PHP-script to optimize all tables in a MySQL database
* - Jan Reilink, Twitter: @Jan_Reilink
*
* Please donate: https://www.paypal.me/jreilink
*/
define( 'DB_NAME', 'db_name' ); // The database name
define( 'DB_USER', 'db_user' ); // Your MySQL username
define( 'DB_PASSWORD', 'db_password' ); // ...and password
define( 'DB_HOST', gethostbyname( 'mysql.example.com' ) );
// why gethostbyname()? See /posts/php-mysql-and-ipv6-still-slow/
$mysqli = new mysqli( DB_HOST,DB_USER,DB_PASSWORD, DB_NAME );
/* one multi query over three lines */
$query = "SELECT CONCAT('OPTIMIZE TABLE ',
GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';')
INTO @optimizecmd FROM information_schema.tables
WHERE table_schema=database();
PREPARE s1 FROM @optimizecmd; EXECUTE s1;";
if ( $mysqli->multi_query( $query ) ) {
do {
/* store first result set */
if ( $result = $mysqli->store_result() ) {
while ( $row = $result->fetch_row() ) {
printf( "%s\n", $row[0] );
}
$result->free();
}
if ( $mysqli->more_results() ) {
/* do something here */
}
}
while ( $mysqli->next_result() );
}
$mysqli->close();
?>
This will make your MySQL database smaller and faster.