count (*) в таблице MyISAM слишком медленный - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть большая база данных 5 ГБ, большинство из ее движков баз данных - MyISAM, ОЗУ сервера - около 20 ГБ, но по умолчанию используется query_cache и другие конфигурации (16 МБ).Версия MySQL 5.7.27, я получил старую резервную копию базы данных объемом 3,5 ГБ, и когда я запускаю запрос на своем локальном компьютере, это происходит быстрее, чем на рабочем месте.

FLUSH QUERY CACHE;
RESET QUERY CACHE;
SELECT SQL_NO_CACHE 
    count(*)
FROM
    company_reports rep
    LEFT JOIN system_users usr ON rep.user_id = usr.id
    LEFT JOIN company_rep_subjects sbj ON rep.subject_id = sbj.id
    INNER JOIN company_partners cus ON rep.partner_id = cus.id
    LEFT JOIN project_con_messages mes ON rep.message_id = mes.id
    LEFT JOIN company_par_user_settings pus ON cus.id = pus.partner_id 
    AND 1 = pus.user_id 
WHERE
    1=1 -- or other where and will generate by ACL and advanced search

Я отключил кэш

 query_cache_limit = 0
 query_cache_size = 0

Я не знаю, почему для выполнения этого запроса требуется около 13 секунд.Есть ли предложения по оптимизации?Моя оперативная память свободна, поэтому, сколько настроек кэша лучше выделить для query_cache.

ВАЖНО: Миграция на InnoDB у меня в голове, но я не знаю, почему этот запрос такой быстрый в моей локальной сети.Любая система блокировки, которая может помешать MySQL быстрее считать записи в производстве?Он тестировался даже тогда, когда наша система не работала и не работала.

Моя локальная система не MYSQL 5.7.27, и я использую 10.1.38-MariaDB.

Здесьэто ОБЪЯСНИТЬ в моем местном

1   SIMPLE  cus index   PRIMARY PRIMARY 3       62293   Using index
1   SIMPLE  rep ref partner_id  partner_id  3   MYDBNAME.cus.id 13  

В производстве:

"Почему они не одинаковы!"Локальным является Mariadb 10 (2 строки), а производственным является MYSQL 5.7.27 (6 строк)

enter image description here

РЕДАКТИРОВАТЬ: после синхронизации локальных индексов с производством теперь локальномедленный!Это хорошо, и я узнал, почему скорость производства медленная, а какие показатели пропущены.Я должен добавить два индекса в производство, читать комментарии.

Новый EXPLAIN на локальном:

1   SIMPLE  cus index   PRIMARY companyname 362     63490   Using index
1   SIMPLE  rep ref partner_id  partner_id  3   ebrahim.cus.id  5   
1   SIMPLE  pus ref partner_id_2,user_id    partner_id_2    3   ebrahim.cus.id  2   Using where

Я не знаю, почему мой локальный использует название компании для индекса, если я заставляю его использовать PRIMARYне было никаких изменений в скорости, но я не знаю, почему в настоящее время EXPLAINS отличаются друг от друга, хотя INDEXES синхронизируются.

Заранее спасибо и извините за мой английский

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