Что лучше MariaDB или MySQL ?

InstantCMS 2.X

Что лучше MariaDB или MySQL ?

#31 23 июля 2019 в 14:21

Такого запроса не в стоке.

Fuze
Если вернуть стоковый файл comments/frontend.php, то стоковый запрос ничуть не быстрее.
  1. /system/controllers/comments/model.php => 297 => modelComments->getComments()
  2. SELECT i.*, r.score AS `is_rated`, u.nickname AS `user_nickname`, u.is_deleted AS `user_is_deleted`, u.avatar AS `user_avatar`, IF(online.date_created IS NOT NULL AND TIMESTAMPDIFF(SECOND, online.date_created, NOW()) <= 180, 1, 0) AS `is_online`
  3. FROM cms_comments i
  4. LEFT JOIN cms_users AS u ON u.id = i.user_id
  5. LEFT JOIN cms_sessions_online AS online ON online.user_id = u.id
  6. LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='86'
  7. WHERE (i.is_deleted IS NULL) AND (i.is_approved = '1')
  8. ORDER BY i.date_pub DESC
  9. LIMIT 1048500, 20
  10. Время выполнения 53.05825 секунд
#32 23 июля 2019 в 14:32

LIMIT 1048500

Ris
При таком кол-ве комментариев конечно надо запрос пагинации чуть переделать. Полагаю, на первой странице проблем нет.
#33 23 июля 2019 в 14:49

Полагаю, на первой странице проблем нет.

Fuze
Да, первые 10000 страниц открываются почти мгновенно.

Вот с этим костылём
  1. // Получаем количество и список записей
  2. $total = !empty($this->count) ? $this->count : $this->model->getCommentsCount();
  3. if (strpos($_SERVER['REQUEST_URI'], 'comments/all') && $this->cms_user->id) {$this->model->limit($perpage)->join .= ("JOIN (SELECT id FROM cms_comments WHERE is_deleted IS NULL ORDER BY id DESC LIMIT ".($page - 1)*$perpage.", $perpage) c ON c.id = i.id ");}
  4. if (!$this->cms_user->id){$this->model->limit($perpage)->join .= ("JOIN (SELECT id FROM cms_comments WHERE is_private = '0' AND is_deleted IS NULL AND is_approved = '1' ORDER BY id DESC LIMIT ".($page - 1)*$perpage.", $perpage) c ON c.id = i.id ");}
  5. $items = $this->model->getComments();
на mariadb10.3 раньше всё работало. Выборка полторы секунды.
Хотя… изменил индекс в cms_comments_rating
  1. ALTER TABLE `cms_comments_rating` DROP INDEX `comment_id`, ADD INDEX `comment_id` (`user_id`, `comment_id`) USING BTREE;
Стало чуть побыстрее.
  1. /system/controllers/comments/model.php => 297 => modelComments->getComments()
  2. SELECT i.*, r.score AS `is_rated`, u.nickname AS `user_nickname`, u.is_deleted AS `user_is_deleted`, u.avatar AS `user_avatar`, IF(online.date_created IS NOT NULL AND TIMESTAMPDIFF(SECOND, online.date_created, NOW()) <= 180, 1, 0) AS `is_online`
  3. FROM cms_comments i
  4. JOIN (SELECT id FROM cms_comments WHERE is_deleted IS NULL ORDER BY id DESC LIMIT 1048480, 20) c ON c.id = i.id LEFT JOIN cms_users AS u ON u.id = i.user_id
  5. LEFT JOIN cms_sessions_online AS online ON online.user_id = u.id
  6. LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='86'
  7. WHERE (i.is_deleted IS NULL) AND (i.is_approved = '1')
  8. ORDER BY i.date_pub DESC
  9. LIMIT 20
  10. Время выполнения 1.91492 секунд
По крайней мере сайт не ложится. laugh
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.