У меня есть большая база данных 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](https://i.stack.imgur.com/1tBKb.png)
РЕДАКТИРОВАТЬ: после синхронизации локальных индексов с производством теперь локальномедленный!Это хорошо, и я узнал, почему скорость производства медленная, а какие показатели пропущены.Я должен добавить два индекса в производство, читать комментарии.
Новый 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 синхронизируются.
Заранее спасибо и извините за мой английский