как уменьшить время загрузки mysql - PullRequest
0 голосов
/ 13 января 2020

У меня есть приложение, которое получает данные из PHP бэкэнд-API.

сейчас все больше и больше людей в сети и имеют чаты, время загрузки сообщений требует столько времени на сообщения (занимает более 10 с ). Я хотел бы знать, как я могу уменьшить время загрузки загрузки сообщения.

коды следующие, даже я меняю данные с 20 на 5, хотя он показывает 5 сообщений за раз, все то же самое долгое время загрузки.

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

$stmt = $this->db->prepare("SELECT * FROM messages 
  WHERE chatId = (:chatId) 
    AND id < (:msgId) 
    AND removeAt = 0 
  ORDER BY id DESC LIMIT 20");

код кажется слишком длинным и не позволяет публиковать здесь сообщения .. проверьте эту ссылку: paste.ofcode.org/i6rHbdVjhfscaMVVva9E9L

структура таблицы базы данных: https://www.imageupload.net/image/msg.OIVDM https://www.imageupload.net/image/database.OIgHh

Ответы [ 2 ]

1 голос
/ 13 января 2020

Вам необходимо узнать об индексах. Если вы настроили индекс для столбца (или столбцов), MYSQL может искать и сортировать вопросы намного быстрее. Попробуйте добавить несколько индексов.

Я бы начал со столбцов removeAt, chatId, fromUserId, toUserId. Вы также можете поэкспериментировать со сложными индексами (removeAt + chatId <- в этом порядке или <code>fromUserId + toUserId).

После добавления индексов запустите команду EXPLAIN для ваших запросов (например, . EXPLAIN SELECT * FROM messages WHERE chatId = 5 AND id < 10 AND removeAt = 0 ORDER BY id DESC LIMIT 20). В результатах вы должны увидеть, какие индексы, где это возможно, и какие индексы использовались MySQL.

Стоит отметить, что не добавляйте слишком много индексов («на всякий случай»), потому что они будут замедлять добавление новых строк в базу данных.


Чтобы добавить индекс go в табличное представление в phpMyAdmin (структура) и выберите столбец, для которого вы хотите добавить индекс. Затем нажмите index под столбцами: enter image description here Вам нужно добавить индексы один за другим. Если вы выберете более одного столбца, он создаст один комплексный индекс.

0 голосов
/ 15 января 2020
INDEX(chatId, removedAt,   -- in either order
      id)                  -- third

Этот индекс «покрывает» и идеально подходит для WHERE и ORDER BY, следовательно, способен также обрабатывать LIMIT 20.

То есть он будет смотреть только на 20 строк тогда как любой другой индекс потребует просмотра всех строк.

Подробнее об оптимальных индексах: http://mysql.rjweb.org/doc.php/index_cookbook_mysql

...