💉 Как программисту быть здоровым? 🤨
Сегодня, в Международный День Здоровья, мы решили особое внимание уделить не только правилам программирования, но и правилам заботы о cвоем здоровье. Программист, между прочим, - довольно опасная профессия!
Подробно ознакомьтесь с советами, которые мы для Вас подготовили, чтобы избежать многих неприятных недугов! 😉
Полезного чтения 😊
P.S. Имеются противопоказания. Перед применением посоветуйтесь с тим лидом.
#itresume
Сегодня, в Международный День Здоровья, мы решили особое внимание уделить не только правилам программирования, но и правилам заботы о cвоем здоровье. Программист, между прочим, - довольно опасная профессия!
Подробно ознакомьтесь с советами, которые мы для Вас подготовили, чтобы избежать многих неприятных недугов! 😉
Полезного чтения 😊
P.S. Имеются противопоказания. Перед применением посоветуйтесь с тим лидом.
#itresume
А как Вы заботитесь о своём здоровье?
Anonymous Poll
67%
Удаляю старый уод
33%
Не пишу универсальных функций
33%
Не изобретаю велосипед
11%
Активно пользуюсь Git
44%
Даю понятные названия переменным
44%
Не люблю усложнять
67%
Не экспериментирую с обозначениями
Рубрика «Вопросы с собеседований» 💥
❓Оператор EXPLAIN для оптимизации SQL-запросов
✅ Ответ:
При выполнении SQL запроса система пытается «найти» оптимальный способ выполнения этого запроса. Посмотреть итоговый план выполнения Вы можете с помощью ключевого слова EXPLAIN.
1. КАК ИСПОЛЬЗОВАТЬ
Использовать оператор EXPLAIN очень просто - достаточно добавить его перед основным запросом. Например:
Результатом работы EXPLAIN в MySQL будет 10 полей (значения взяты для примера):
→ Id – порядковый номер для каждого SELECT’а внутри запроса (когда имеется несколько подзапросов)
→ Select_type – тип запроса SELECT (SIMPLE - без подзапросов и UNION, PRIMARY - внешний запрос в джоине, DERIVED - часть подзапроса в FROM, SUBQUERY - первый SELECT в подзапросе и так далее).
→ Table – таблица, к которой относится выводимая строка
→ Type — указывает на то, как MySQL связывает используемые таблицы (System – таблица имеет только одну строку, Eq_ref – все части индекса используются для связывания, All – для нахождения соответствующих строк используются сканирование всей таблицы и так далее). Именно в этом поле заложена пища для размышлений - здесь можно выявить слабое место.
→ Possible_keys – показывает индексы, которые могут быть использованы для нахождения строк в таблице.
→ Key– указывает на использованный индекс.
→ Key_len – длина индекса, которую оптимизатор MySQL выбрал для использования.
→ Ref – указываются столбцы или константы, которые сравниваются с индексом, указанным в поле key.
→ Rows – отображает число записей, обработанных для получения выходных данных. Еще одна «точка роста» - тут Вы можете понять, как стоить поработать над Вашими джоинами и фильтрами.
→ Extra – содержит дополнительную информацию, относящуюся к плану выполнения запроса.
3. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ
После EXPLAIN в запросе вы можете использовать ключевое слово EXTENDED и MySQL покажет вам дополнительную информацию о том, как выполняется запрос.
Чтобы увидеть эту информацию, вам нужно сразу после запроса с EXTENDED выполнить запрос SHOW WARNINGS. Наиболее полезно смотреть эту информацию о запросе, который выполнялся после каких-либо изменений сделанных оптимизатором запросов.
4. ДОКУМЕНТАЦИЯ
С полной информацией Вы можете ознакомиться в официальной документации MySQL (там все понятно написано и проиллюстрировано примерами) 👉🏻 http://bit.ly/3wCaBpi
Еще один полезный источник (еще и на русском языке!) - документация Postgres Pro 👉🏻 http://bit.ly/3utX6WT
#interview_problems #sql
❓Оператор EXPLAIN для оптимизации SQL-запросов
✅ Ответ:
При выполнении SQL запроса система пытается «найти» оптимальный способ выполнения этого запроса. Посмотреть итоговый план выполнения Вы можете с помощью ключевого слова EXPLAIN.
1. КАК ИСПОЛЬЗОВАТЬ
Использовать оператор EXPLAIN очень просто - достаточно добавить его перед основным запросом. Например:
EXPLAIN SELECT * from table t2. ВЫВОД КОМАНДЫ
Результатом работы EXPLAIN в MySQL будет 10 полей (значения взяты для примера):
id: 1Давайте разберем каждое из этих полей.
select_type: SIMPLE
table: categories
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra:
1 row in set (0.00 sec)
→ Id – порядковый номер для каждого SELECT’а внутри запроса (когда имеется несколько подзапросов)
→ Select_type – тип запроса SELECT (SIMPLE - без подзапросов и UNION, PRIMARY - внешний запрос в джоине, DERIVED - часть подзапроса в FROM, SUBQUERY - первый SELECT в подзапросе и так далее).
→ Table – таблица, к которой относится выводимая строка
→ Type — указывает на то, как MySQL связывает используемые таблицы (System – таблица имеет только одну строку, Eq_ref – все части индекса используются для связывания, All – для нахождения соответствующих строк используются сканирование всей таблицы и так далее). Именно в этом поле заложена пища для размышлений - здесь можно выявить слабое место.
→ Possible_keys – показывает индексы, которые могут быть использованы для нахождения строк в таблице.
→ Key– указывает на использованный индекс.
→ Key_len – длина индекса, которую оптимизатор MySQL выбрал для использования.
→ Ref – указываются столбцы или константы, которые сравниваются с индексом, указанным в поле key.
→ Rows – отображает число записей, обработанных для получения выходных данных. Еще одна «точка роста» - тут Вы можете понять, как стоить поработать над Вашими джоинами и фильтрами.
→ Extra – содержит дополнительную информацию, относящуюся к плану выполнения запроса.
3. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ
После EXPLAIN в запросе вы можете использовать ключевое слово EXTENDED и MySQL покажет вам дополнительную информацию о том, как выполняется запрос.
Чтобы увидеть эту информацию, вам нужно сразу после запроса с EXTENDED выполнить запрос SHOW WARNINGS. Наиболее полезно смотреть эту информацию о запросе, который выполнялся после каких-либо изменений сделанных оптимизатором запросов.
4. ДОКУМЕНТАЦИЯ
С полной информацией Вы можете ознакомиться в официальной документации MySQL (там все понятно написано и проиллюстрировано примерами) 👉🏻 http://bit.ly/3wCaBpi
Еще один полезный источник (еще и на русском языке!) - документация Postgres Pro 👉🏻 http://bit.ly/3utX6WT
#interview_problems #sql
Используете команду EXPLAIN
Anonymous Poll
23%
Да, конечно!
36%
Нет, все никак руки не доберутся :с
41%
Сам SQL бы выучить, куда там оптимизировать...
💥 Глаголы R vs Операторы SQL 💪🏻
Как лучше работать с таблицами: с помощью R или SQL? Отвечаем - оба языка хороши!
Вместе с R4marketing проводим параллель между синтаксисом R и SQL, чтобы Вам было проще освоиться!
В карточках разбираем основные функции, библиотеки и инструменты для ловкой манипуляции данными 🤤
#sql #rstat #cheatsheet
Как лучше работать с таблицами: с помощью R или SQL? Отвечаем - оба языка хороши!
Вместе с R4marketing проводим параллель между синтаксисом R и SQL, чтобы Вам было проще освоиться!
В карточках разбираем основные функции, библиотеки и инструменты для ловкой манипуляции данными 🤤
#sql #rstat #cheatsheet
🔥1
А Вы что предпочитаете?
Anonymous Poll
44%
R
41%
SQL
13%
И то, и другое
3%
Вообще не работаю с таблицами
Какой вспомогательной функции нет в глаголе dplyr::select?
Anonymous Quiz
37%
everything()
16%
one_of()
26%
num_range()
21%
equals()
GROK IT! Ответ на задачу о глаголе dplyr::select 🔔
❓Вчера опубликовали вопрос: Какой вспомогательной функции нет в глаголе dplyr::select?
» everything()
» one_of()
» num_range()
» equals()
✅ ОТВЕТ: equals()
💥 ОБЪЯСНЕНИЕ:
dplyr - это библиотека языка R для манипулирования данными, состоящая их глаголов, которые помогают решать наиболее распространенные задачи:
- mutate() добавляет новые столбцы или изменяет существующие
- select() выбирает нужные столбцы
- filter() выбирает строки на основе указанных условий
- summarise() агрегирует несколько строк
- arrange() изменяет порядок строк
В помощь к этим глаголам можно использовать дополнительные функции. Вот функции для глагола select():
👉🏻 ВЫБОР ОПРЕДЕЛЕННЫХ СТОЛБЦОВ
- everything(): Выбрать все переменные
- last_col(): Выбрать последнюю переменную
👉🏻 ВЫБОР СТОЛБЦОВ ПО ШАБЛОНУ ИМЕНИ
- starts_with(): Начинается с префикса
- ends_with(): Заканчивается суффиксом
- contains(): Содержит строку
- matches(): Соответствует регулярному выражению
- num_range(): Соответствует числовому диапазону
👉🏻 ВЫБОР СТОЛБЦОВ С НАЗВАНИЯМИ ИЗ ВЕКТОРА
- all_of(): Сопоставляет имена переменных в символьном векторе. Все имена должны присутствовать, иначе возникает ошибка out-of-bounds.
- any_of(): То же самое, что и all_of (), за исключением того, что для несуществующих имен не возникает ошибок.
- one_of() - менее точный аналог функций all_of() и any_of()
👉🏻 ВЫБОР СТОЛБЦОВ ПО РЕЗУЛЬТАТАМ НЕКОТОРОЙ ФУНКЦИИ
- where(): Применяет функцию ко всем переменным и выбирает те, для которых функция возвращает TRUE
Как видите, здесь есть все функции, кроме equals(). Такой функции в принципе не существует в библиотеке dplyr.
🗣 Однако, в библиотеке dplyr есть самостоятельная функция all_equal(), которая позволяет сравнивать фреймы данных, при желании игнорируя имена строк и столбцов.
-.-.-.-.-.-
❗️Таким образом, правильный ответ - equals()
#grokit
❓Вчера опубликовали вопрос: Какой вспомогательной функции нет в глаголе dplyr::select?
» everything()
» one_of()
» num_range()
» equals()
✅ ОТВЕТ: equals()
💥 ОБЪЯСНЕНИЕ:
dplyr - это библиотека языка R для манипулирования данными, состоящая их глаголов, которые помогают решать наиболее распространенные задачи:
- mutate() добавляет новые столбцы или изменяет существующие
- select() выбирает нужные столбцы
- filter() выбирает строки на основе указанных условий
- summarise() агрегирует несколько строк
- arrange() изменяет порядок строк
В помощь к этим глаголам можно использовать дополнительные функции. Вот функции для глагола select():
👉🏻 ВЫБОР ОПРЕДЕЛЕННЫХ СТОЛБЦОВ
- everything(): Выбрать все переменные
- last_col(): Выбрать последнюю переменную
👉🏻 ВЫБОР СТОЛБЦОВ ПО ШАБЛОНУ ИМЕНИ
- starts_with(): Начинается с префикса
- ends_with(): Заканчивается суффиксом
- contains(): Содержит строку
- matches(): Соответствует регулярному выражению
- num_range(): Соответствует числовому диапазону
👉🏻 ВЫБОР СТОЛБЦОВ С НАЗВАНИЯМИ ИЗ ВЕКТОРА
- all_of(): Сопоставляет имена переменных в символьном векторе. Все имена должны присутствовать, иначе возникает ошибка out-of-bounds.
- any_of(): То же самое, что и all_of (), за исключением того, что для несуществующих имен не возникает ошибок.
- one_of() - менее точный аналог функций all_of() и any_of()
👉🏻 ВЫБОР СТОЛБЦОВ ПО РЕЗУЛЬТАТАМ НЕКОТОРОЙ ФУНКЦИИ
- where(): Применяет функцию ко всем переменным и выбирает те, для которых функция возвращает TRUE
Как видите, здесь есть все функции, кроме equals(). Такой функции в принципе не существует в библиотеке dplyr.
🗣 Однако, в библиотеке dplyr есть самостоятельная функция all_equal(), которая позволяет сравнивать фреймы данных, при желании игнорируя имена строк и столбцов.
-.-.-.-.-.-
❗️Таким образом, правильный ответ - equals()
#grokit
А Вы используете R для работы с данными?
Anonymous Poll
46%
Да, очень удобный язык!
3%
Больше люблю SQL
23%
Python one love ❤️
20%
В R, оказывается, много полезных функций, надо выучить!
9%
Я не знаю язык R :c