Что нового?

Welcome to Все о цифровых товарах продажа цифровых товаров - All about digital goods selling digital goods

Join us now to get access to all our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, and so, so much more. It's also quick and totally free, so what are you waiting for?

Ask question

Ask Questions and Get Answers from Our Community

Answer

Answer Questions and Become an Expert on Your Topic

Contact Staff

Our Experts are Ready to Answer your Questions

Database 20 советов и трюков для всех, кто занимается разработкой под MySQL

АртемийЛебедев

Квартирмейстер
Premium
Регистрация
2 Сен 2020
Сообщения
4
Реакции
1
Баллы
8
Адрес
https://www.artlebedev.ru/
Веб-сайт
www.tema.ru
Credits
221
Native language | Родной язык
Русский
С момента выпуска, в 1995, MySQL быстро стала самой популярной в мире СУБД (Система Управления Базой Данных). С такой популярностью приходит и ответственность… а также бесчисленные улучшения, обновления и хитрые трюки.

Порывшись в интернете можно действительно обнаружить, что недостатка в советах и трюках по теме MySQL нет. Но какие из рекомендаций являются самыми полезными и эффективными? Ниже, вашему вниманию представлены 20 лучших советов, которые будут полезны как профессионалам, так и новичкам.

1. НЕ РЕДАКТИРУЙТЕ ФАЙЛЫ ДАМПОВ (DUMP FILES)​

Если вы когда-нибудь видели файлы дампов, созданные программой mysqldump, то вам известно, что они выглядят как обычные текстовые файлы. Но те, кто хоть раз пытался редактировать такие файлы, знают, что это совсем не совсем то, чем оно кажется.

Многие люди пытаются править файлы дампов стандартным текстовым редактором и повреждают их. Единственный гарантированный вариант обойтись без ошибок, это НЕ ПРАВИТЬ ФАЙЛЫ ДАМПОВ.

2. РАЗМЕР БЛОКА MYISAM (MYISAM BLOCK SIZE)​

Одной из наиболее покрытых мраком настроек является размер блока индексов для таблиц MyISAM. Значение параметра myisam_block_size находится в. MYI-файлах в буфере ключей, а также на диске. Стандартное значение составляет 1 килобайт, что слишком мало для современных систем.

Большинство файловых систем использует блоки большего размера. А мы знаем, что запись одиночного блока индекса потребует сначала чтения, а затем записи. Операционная система не будет вести запись на основной диск, пока размер блока индекса равен или больше размера блока файловой системы.

3. ВКЛЮЧЕНИЕ DELAY_KEY_WRITE​

По умолчанию, опция delay_key_write отключена. Это сделано потому, что при возникновении сбоя в проекте, использующем MyISAM, вы получите поврежденную базу данных. Итак, зачем может понадобиться включать эту функцию? Все просто. Потому что включение delay_key_write гарантирует, что база данных не будет удалять файл ключей MyISAM после каждой операции записи.

По этой причине, если вы в ближайшее время собираетесь производить запись, то сэкономите массу времени. Способ включения delay_key_write зависит от версии. Чтобы узнать об особенности включения данной опции в вашей версии MySQL, воспользуйтесь Как увидеть ссылки? | How to see hidden links?.

4. ОБЪЕДИНЕНИЯ: СОЗДАВАЯ СТОЛБЦЫ ОДИНАКОВЫХ ТИПОВ, НЕ ЗАБЫВАЙТЕ ПРО ИНДЕКСЫ​

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

В противном случае, MySQL попытается провести полное сканирование таблицы. Всегда, когда вам требуется извлечь информацию из ваших таблиц, просто модифицируйте запросы так, чтобы получать информацию из определенных столбцов.

5. ОПРЕДЕЛЯЙТЕ WHERE С ПАРАМЕТРОМ LIMIT 1​

Допустим, что вы ищете одну строку, но запрос делается ко всем таблицам. Почему бы не оптимизировать производительность путем добавления параметра LIMIT 1 и возврата только той части, которая была запрошена? Этот метод, вместо просмотра всей таблицы (таблиц) или индексов, остановит поиск после нахождения искомой строки. О том, как реализовать такой прием, можно прочитать в этой статье. Это достаточно простой трюк.

6. ДОБАВЛЯЙТЕ КЛЮЧЕВОЕ СЛОВО EXPLAIN К ЗАПРОСАМ SELECT​

Любой, кто пользуется MySQL, в не зависимости от того, опытный он или новичок, оценит удобство и простоту этого совета. Добавив ключевое слово EXPLAIN, можно более точно указать MySQL на то, что должен сделать ваш запрос. EXPLAIN может уточнить, как будут сканироваться ваши таблицы, использоваться индексы и тому подобное.

Создайте сложный запрос SELECT с объединениями и добавьте EXPLAIN перед ним. Результат вы сможете оценить сразу же. Используйте этот трюк, чтобы сэкономить время.

7. КЭШ ЗАПРОСОВ: ОПТИМИЗИРУЙТЕ ВАШИ ЗАПРОСЫ​

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

Один и тот же запрос может выполняться несколько раз. И гораздо быстрее запросить готовый результат из кэша. Однако, для запроса CURDATE (текущая дата) это недоступно. Чтобы реализовать кэширование для CURDATE, просто добавьте перед запросом PHP-строку:



//CURDATE не определена
$query = 'SELECT id FROM table WHERE publish_date = CURDATE()';


8. ИСПОЛЬЗУЙТЕ ТРАССИРОВКУ СТЕКА, ЧТОБЫ ИЗБЕЖАТЬ ОШИБОК​

На сайте skysql.com имеется очень много трюков и секретов MySQL. Мы собираемся разобраться с одним из них в этом коротком подзаголовке, потому что это действительно очень просто, чтобы пройти мимо. Опция MySQL stack_trace может быть использована, чтобы выяснить, в чем проблема и устранить её.

Из всех возможных применений, наиболее интересным, скорее всего, будет знать как нулевой указатель (null pointer) легко может внести хаос в код. А также как просто это можно выявить, отследить и исправить, используя совет от Sky SQL. Ознакомьтесь с Как увидеть ссылки? | How to see hidden links?.

9. ПЕРЕЧИСЛЕНИЯ ENUMS И УСТАНОВКА SQL_MODE В ЗНАЧЕНИЕ TRADITIONAL​

Тип данных ENUMS может в вести в заблуждение, потому что он может принимать несколько значений, а это легко ведет к ошибкам. Объект ENUMS может быть равен определенному значению, значению NULL, а также может интерпретироваться, как пустая строка.

Конечно, вы получите предупреждение, если что-то неверно. К счастью это легко устраняется. Установите параметр mysql_mode в значение TRADITIONAL. Вуаля!
 
shape1
shape2
shape3
shape4
shape7
shape8