Tengo una consulta SQL:

SELECT country_code FROM GeoIP WHERE 3111478102>=ip_from AND 3111478102<=ip_to;

Intenté ejecutar la misma consulta tanto en phpMyAdmin como en un script php normal, y aquí está el resultado:

phpMyAdmin

enter image description here

Script PHP

enter image description here

Como puede ver, la consulta tardó solo 0.8 segundos en ejecutarse completamente en phpMyAdmin. ¡Mientras que tomó 4.5 segundos en el script PHP normal!

El código del script php:

<?php
    // ob_start();
    // error_reporting(0);
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');

    header_remove("X-Powered-By");
    ini_set('session.gc_maxlifetime', 13824000);
    session_set_cookie_params(13824000);
    session_start();
    include_once './config.php';
    // include_once './functions/mainClass.php';

    $beforeMicro = microtime(true);
    $res = $conn->query("SELECT country_code FROM GeoIP WHERE 3111478102>=ip_from AND 3111478102<=ip_to");
    if ($res->rowCount() > 0){
        $sen = $res->fetch(PDO::FETCH_OBJ);
        $country_code = $sen->country_code;
        print_r([$country_code]);
    }
    $afterMicro = microtime(true);
    echo 'time:'.round(($afterMicro-$beforeMicro)*1000);
?>

Mientras tanto, estoy configurando un nuevo servidor web y uso lo siguiente:

CentOS 8
Apache 2.4.46
PHP 7.2.24

Tenga en cuenta: La tabla que estoy buscando (GeoIP) contiene más de 39 registros de minions. Pero creo que este no es el problema porque la misma consulta se ejecuta más rápido en el mismo servidor. También intenté cargar la misma base de datos y el script PHP en otra cuenta de alojamiento compartido (no en mi propio servidor), y funcionó y estaba ejecutando la consulta en solo 1.6s desde el script php.

1
Ghadeer R. Majeed 13 mar. 2021 a las 14:45

1 respuesta

La mejor respuesta

Este podría ser un hilo útil para su pregunta: ¿Por qué phpmyadmin sería significativamente más rápido que el comando mysql? línea?

Las herramientas de front-end como phpMyAdmin a menudo se graban en una cláusula LIMIT para paginar los resultados y no bloquear su navegador o aplicación en tablas grandes. Una consulta que pueda devolver millones de registros y que, al hacerlo, lleve mucho tiempo, se ejecutará más rápido si está más restringida.

No es realmente justo comparar una consulta limitada versus una completa, el tiempo de recuperación será significativamente diferente. Compruebe que ambas herramientas están obteniendo todos los registros.

2
Robert Fiko 13 mar. 2021 a las 11:52