PHP в MYSQL DB выполняет оператор очень медленно

0

Я создаю 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, поэтому я думаю, что это может быть возможной проблемой, но это не объясняет, почему иногда веб-сайт загружается быстро.

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

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

  • 0
    Помимо производительности, база данных, доступная для общественности (dyndns), представляет собой угрозу безопасности и должна быть надежно защищена. По какой причине ваш веб-сервер не работает в интрасети и обслуживает веб-сайт (должен быть защищен, но менее уязвим)?
  • 0
    На самом деле мне было интересно, каковы возможные риски создания веб-сайта таким образом. Причина в том, что я все еще мало знаю обо всем. Спасибо за ваш комментарий, я буду искать лучший способ подключения к моей базе данных.
Теги:
ms-access

4 ответа

1

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

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

0

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

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

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

0

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

  • 1
    Индексы в первую очередь. Настройка сервера вторая. Кеширование третье.
  • 0
    Скорее всего, query-cache запросов в большинстве случаев делает медленный запрос быстрым, но для этого не нужно кэшировать правильный индексированный запрос с таким небольшим количеством данных.
0

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

table1 col1, col6 
table2 col6 
table3 col1 

в конце концов с избыточностью

table2 co6, col2,col3,col4,col5

Ещё вопросы

Сообщество Overcoder
Наверх
Меню