PHP в MYSQL DB выполняет оператор очень медленно - PullRequest
0 голосов
/ 25 марта 2019

Я создаю php-сайт для компании, которая отображает информацию о базе данных на MYSQL, но иногда для загрузки этой информации требуется около 20 секунд, и это просто происходит случайным образом. При правильной работе это занимает около 0,005 секунд.

База данных находится на локальном виртуальном сервере во внутренней сети компании, но я получаю к ней доступ через dyndns.info:port. В случае замедления, если вы многократно перезагружаетесь, веб-сайт работает медленно, а внезапно, когда он быстро загружается, сохраняет быструю перезагрузку и т. Д.

try {
        $conection= new PDO("mysql:host=domain.dyndns.info; port=0000; dbname= db", user, pass);
        return $conection;
    } catch (PDOException $e) {
    }


Код медленен в операторе execute:


$statement = $conexion->prepare("SELECT table1.col1, table2.col2, table2.col3, table2.col4, table2.col5 FROM table1 LEFT JOIN table2 ON table1.col6 = table2.col6 LEFT JOIN table 3 ON table1.col1 = table3.col1 LIMIT 10 ");
$start_timer = microtime(true);
$statement->execute();

$piezas = $statement->fetchAll();


$end_timer = microtime(true);

В запросе есть три левых объединения, в table1 - 50000 строк, в table2 - 20 000, а в table3 - 80 000, поэтому я думаю, что это может быть возможной проблемой, но это не объясняет, почему иногда веб-сайт загружается быстро.

Другой возможной проблемой может быть виртуальный сервер, но я не уверен, объясняет ли это случайную медлительность запроса.

Есть идеи, что может быть реальной проблемой? или какие-либо инструменты тестирования, которые могут мне помочь?

Ответы [ 4 ]

1 голос
/ 25 марта 2019

У вас медленный запрос?

Запустите EXPLAIN для запроса и проанализируйте его.

0 голосов
/ 02 апреля 2019

Проблема была в запросе, поэтому я загрузил представление в базу данных и использовал его в своем запросе вместо длинного запроса.

$statement = $conexion->prepare("SELECT * FROM view LIMIT 10");

Вот и все. Спасибо, ребята, за все ваши ответы.

0 голосов
/ 25 марта 2019

убедитесь, что у вас есть правильные индексы на

table1 col1, col6 
table2 col6 
table3 col1 

в конце концов с резервированием

table2 co6, col2,col3,col4,col5
0 голосов
/ 25 марта 2019

Если он загружается быстро, иногда я бы сказал, что это из-за кеширования, таблица с тонной строк и кучей объединений будет выполняться медленно, я предлагаю реализовать что-то вроде memcached или redis и кешировать большие запросы, подобные этой. Это поможет вашему сайту быстрее загружаться, и вы сможете контролировать кеш, сколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...