Page 1 of 1

MySQL и charset latin1

Posted: Fri Aug 27, 2021 5:31 am
by magicum
Здравствуйте.

Имеются несколько ресурсов, в которых сами базы много кочевали между версиями MySQL с незапамятных времен. Очень вероятно, что еще с 4 версии.
Как бы там ни было, чарсет там стоял и стоит latin1, хотя языки внутри разные, есть и русский и азиатские.

Дальше только догадки, хочется их прояснить.

Сейчас работает все нормально, в смысле тексты отображаются ок.
Хотя на выходе, судя по хедерам отдается всё в utf8, как и любят браузеры.

Так вот, базы огромные, нагрузка приличная.

Я знаю, как все эти базы перекодировать нормально в utf8, но это займёт много времени, и хотелось бы узнать, много ли нагрузки добавляет PHP когда читает из базы в latin1 а отдаёт веб серверу в utf8 ?

Причем в этих базах бывает так, что:
в базе дефолт стоит utf8, а у таблицы - latin1
или даже у таблицы - utf8, а у поля - latin1

Я читал, что при таком раскладе как минимум могут быть проблемы с поиском и сортировкой.
А с нагрузкой?
Базы по 10-15гигов.

Re: MySQL и charset latin1

Posted: Fri Aug 27, 2021 5:45 am
by admin
Приветствую!

пхп ничего не перекодирует, просто что отдает база то и выводит

а вот влияет ли это как-то на нагрузку мускла - я не тестировал, просто не касался этого вопроса
но думаю что оптимизация сложных запросов \ инедксов принесет больше пользы, чем кодировки

думаю что например если прибить индексы которые не используются - уже будет буст больше чем любая кодировка

Re: MySQL и charset latin1

Posted: Fri Aug 27, 2021 6:16 am
by magicum
Здесь есть затруднения.
Можно конечно грохнуть все индексы, которые выведет:

Code: Select all

select * from sys.schema_unused_indexes;
но как-то это неправильно, мне кажется.

Re: MySQL и charset latin1

Posted: Fri Aug 27, 2021 6:30 am
by admin
Ситуация такая:

например, если сайт только с сортиоовкой по ЦТР то индекс по дате не надо
если нет сортировки по duration - тоже не надо
но например если есть страницы типа duration + category_id то имеет смысл добавить этот индекс
и тп , не ничего необычного)

но если добавить все вероятные индексы по дефолту то каждое обновление цтр (а оно каждую минуту) будет перестраивать кучу индексов = нагрузка

Учитывая, что создать индекс - дело пары минут, то я не вижу проблем с тем, что б поэкспериментировать с индексами
смотрим нагрузку, добавляем\убираем что-то , сравниваем
что-то пошло не так - просто вернули индекс и тп

можно так же пройтись MySQLTuner , может он скажет что-то полезное