PHP скорость обработки массива данных из MySQL

202
24 ноября 2018, 15:20

Пишу веб-часть для своего приложения. В ней получаю данные из MSSQL и MySQL баз данных, после чего формирую json строку, которую считывает десктопное приложение. В ходе работы я заметил, что выборка данных из БД от Microsoft составляет 0.0076с (замерял время работы php скрипта), при этом выборка из MySQL занимает 1.0019с. Сам запрос простейший, и если верить phpmyadmin'у выполняется за 0.0003с. После получения данных в while записываю в многомерный массив вида "$posts[$x][$y] = " полученные значения. Неужели такая операция занимает настолько много времени? Для работы с mysql использую mysqli_* функции. Вот код запроса:

SELECT t.thread_id, t.title, t.username, t.post_date
            FROM `xf_thread` t
            WHERE t.node_id = 2
            ORDER BY t.post_date DESC
            LIMIT 5

А вот сама функция работы с данными:

$fsql = "";
    $furl_link = "";
    $configs = include('config.php');
    // Выбираем тип форумного движка
    switch($configs->forum_setting_engine){
        case 'ipb':
            $fsql = "
            SELECT tid,title,description,last_post,last_poster_id,last_poster_name"; 
            ....
    }
        $Connection = mysqli_connect($configs->forum_db_host, $configs->forum_db_user, $configs->forum_db_pass, $configs->forum_db_name);
        $Connection->set_charset('utf8');
        $result = mysqli_query($Connection, $fsql);
        $x = 0; // счётчик количества строк
        while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){        
            $posts[$x]['thread_id'] = $row['thread_id'];
            $posts[$x]['title'] = $row['title'];
            $posts[$x]['username'] = $row['username'];
            $posts[$x]['date'] = date( "d.m.Y H:i", $row['post_date'] );
            $posts[$x]['link'] = $configs->forum_setting_url.build_url_string($row['thread_id'], $row['desc_id'], $furl_link);
            $x++;
        }    
            mysqli_free_result($result);
            mysqli_close($Connection);
            return $posts;

Данная задержка достаточно не приятна, т.к. в интерфейсе программы некоторое время остаются не заполненные поля. Я понимаю что можно кешировать страницу на стороне сервера, но всё же хотелось узнать мнение и советы более компетентных в этой области людей, возможно есть другой способ обработки данных, или необходимо использовать другой драйвер.

p.s. Обе БД установлены на локальной машине.

Answer 1

Проблема оказалась в настройках локального веб-сервера. В open-server при включённом IPv6, соединение с БД mysql как раз занимало около секунды, что и было позднее обнаружено при профилировании. Решилось установкой патча.

READ ALSO
Помогите пожалуйста с кодировкой

Помогите пожалуйста с кодировкой

Отправляю аякс запрос на сервер

234
Вывести инфоблоки частями

Вывести инфоблоки частями

Необходимо для определенных элементов инфоблока задать разную верстку :

162
Где ошибка в регулярном выражении?

Где ошибка в регулярном выражении?

Подскажите, почему не срабатывает регулярка

152
Выполнение DRY на практике

Выполнение DRY на практике

Всем приветПишу на laravel

165