Этот коммит содержится в:
Ihar Hancharenka 2024-06-08 18:47:47 +03:00
родитель 3f5bd60c70
Коммит 689ccc710c
19 изменённых файлов: 605 добавлений и 72 удалений

457
db/sql/postgres/feature/optimization/tips.txt Обычный файл
Просмотреть файл

@ -0,0 +1,457 @@
************************************************************************************
В первой части (https://t.me/pg_guru/713) мы с вами узнали причины, по которым у PostgreSQL может не получаться использовать индекс, в этой части мы рассмотрим причины по которым PostgreSQL может не хотеть использовать индекс.
1⃣ Неправильные настройки стоимости операций выполнения запросов.
О настройках оценки стоимости запросов планировщиком мы уже писали. (https://t.me/pg_guru/707) Если вы накосячили в этих настройках, то планировщик PostgreSQL может отдавать предпочтение последовательному сканированию вместо поиска по индексу, считая сканирование более производительным. Так что будьте осторожны с этими настройками.
Есть еще одна настройка, которая может повлиять на поведение планировщика, называется она enable_seqscan. Если мы ее поставим в значение off, то это не значит, что мы совсем отключим последовательное сканирование, просто планировщик будет предпочитать сканирование по индексу. Учтите, что не во всех случаях сканирование по индексу может быть более производительным чем последовательное сканирование. Так что с этой настройкой тоже будьте аккуратны.
2⃣ Маленькая таблица с данными.
Если у вас небольшая таблица (100 строк или меньше), то планировщик PostgreSQL может решить, что последовательное сканирование будет более быстрым, даже для запросов с высокой селективностью. И здесь может быть и не стоит заставлять планировщик использовать индекс, так как действительно последовательное сканирование будет быстрее.
В любом случае нужно смотреть план запроса и скорость его выполнения при использовании индекса и без него.
3⃣ Запрос возвращает большее количество строк таблицы.
Если у вас запрос с малой селективностью, т.е. возвращается бОльшая часть строк таблицы, то здесь тоже планировщик PostgreSQL может предпочесть последовательное сканирование. При каком кол-ве возвращаемых строк планировщик может предпочесть последовательное сканирование неизвестно. Опять же, EXPLAIN вам в помощь 😉
4⃣ Использование оператора LIMIT.
С помощью LIMIT мы ограничиваем кол-во выводимых строк в результате запроса, по этому тут как и случаях 2⃣ и 3⃣ планировщик может предпочесть последовательное сканирование, что может быть гораздо медленнее использования индекса на больших таблицах. По этому используйте LIMIT с осторожностью в запросах.
5⃣ Неактуальная статистика.
Планировщик при принятии решения о выполнении того или иного плана запроса в первую очередь опирается на статистику. Если статистика в базе неактуальная, то планировщик может посчитать кол-во строк меньшим, чем есть на самом деле в таблице и предпочесть последовательное сканирование вместо индекса. По этому актуальность статистики очень важна.
Но может случиться так, что у вас в базе случилась какая-то массовая загрузка данных и VACUUM еще не успел придти в такие таблицы с новыми данными и собрать новую статистику. Пока VACUUM этого не сделает, запросы к этим таблицам могут выполняться совсем неоптимальным образом.
Если у вас в базе массовая загрузка данных происходит очень часто, то имеет смысл вручную или по расписанию дополнительно обновлять статистику, не дожидаясь когда это сделает VACUUM.
Это все, на наш взгляд, основные причины, по которым планировщик PostgreSQL может не использовать индекс. Если знаете еще какие-то, то пишите в комментариях к посту 👇 😉
************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.************************************************************************************
Захотели мы ускорить запрос, создали индекс по нужной колонке таблицы и успокоились. А PostgreSQL не использует, созданный нами индекс и продолжает делать последовательное сканирование по таблице, например. В этой серии постов попытаемся разобраться почему так может происходить.
В расследовании проблем с индексами лучший наш друг, это команда EXPLAIN. Она, конечно, не покажет нам точную причину неиспользования индекса PostgreSQL, но по крайней мере задаст направление, в котором нам следует производить расследование.
При расследовании проблем с индексами можно использовать несколько приемов. Например, если PostgreSQL использует не тот индекс, на который вы надеялись, то вы можете явно открыть транзакцию, удалить в ней индекс, выполнить запрос, посмотреть его план, а потом транзакцию откатить. Или вы можете использовать расширение для создания гипотетических индексов HypoPG, о котором мы уже писали (https://t.me/pg_guru/344), чтобы смоделировать различные ситуации выполнения запроса и использования индекса.
PostgreSQL может не использовать индекс по двум глобальным причинам:
✅ Потому что не может использовать созданный индекс;
✅ Потому что считает, что использование индекса не приведет к увеличению производительности выполнения запроса.
У первой причины есть несколько вариантов:
1⃣ Индекс не существует ( забыли создать, например 😅);
2⃣ Функция препятствует использованию индекса.
Здесь уже ситуация посложнее чем в первом варианте. Предположим, что у нас есть какой-то такой запрос:
SELECT * FROM table WHERE LOWER(email) = 'example@yandex.ru';
В запросе мы ищем конкретный email адрес, приведя его к нижнему регистру с помощью функции LOWER (). В данном случае PostgreSQL не будет использовать индекс на колонке email, даже если может.
Выходом будет создать так называемый функциональный индекс на колонке email. Делается это так:
CREATE INDEX ind_email ON TABLE (LOWER(email));
Функциональный индекс создается не по полю таблицы, а по произвольному выражению и хранит значения результата работы функции, которых фактически может и не быть в таблице. Стоит помнить, что если у вас создан индекс по функции со сложными вычислениями, то и обновление такого индекса будет достаточно затратной операцией с точки зрения вычислительных ресурсов. Также по функциональному индексу будет собираться отдельная статистика. В каких-то случаях будет более рационально переписать запрос, чем создавать функциональный индекс.
3⃣ Приведение к типу данных.
Как правило, у PostgreSQL нет проблем с конвертацией одного типа данных в другой, но в некоторых случаях такая конвертация может привести к неиспользованию индекса. Например, в таком запросе не будет использоваться индекс на колонке id как раз из-за приведения к типу numeric:
SELECT * FROM table WHERE id = 100::numeric;
Следовательно, нужно следить за такими вещами и проверять использует ли PostgreSQL индекс в вашем запросе при приведении к определенному типу данных.
4⃣ SQL оператор не поддерживается выбранным типом индекса.
Одним из таких операторов, например, является ILIKE. Если мы напишем такой запрос:
SELECT * FROM table WHERE email ILIKE example@yandex.ru;
ILIKE является расширением оператора LIKE и не описан в стандарте SQL, это фишка PostgreSQL. ILIKE позволяет нам делать независимый от регистра поиск по заданному шаблону с учетом языковой среды, в которой установлена PostgreSQL. B-tree индекс не поддерживает данный оператор, так что в таком запросе индекс на поле email не будет использован.
Здесь мы рассмотрели варианты почему PostgreSQL НЕ МОЖЕТ использовать индекс, завтра мы с вами рассмотрим варианты, при которых PostgreSQL НЕ ХОЧЕТ использовать индекс, а предпочитать последовательное сканирование, или еще какие-то другие методы сканирования данных.

Просмотреть файл

@ -1,3 +1,6 @@
2024
freeCodeCamp - Azure DevOps Engineer Expert Certification (AZ-400) – Full Course to PASS the Exam 0:00 of 7:38:27
https://www.youtube.com/watch?v=11KT1hPNkY4
2023
freeCodeCamp - Microsoft Azure Fundamentals Certification Course (AZ-900) UPDATED – Pass the exam in 8 hours! 0:00 of 8:21:48
https://www.youtube.com/watch?v=5abffC-K40c

Просмотреть файл

@ -1,3 +1,6 @@
2024
https://theoverclockingpage.com/2024/05/13/tutorial-transforming-a-qlc-ssd-into-an-slc-ssd-dramatically-increasing-the-drives-endurance/?lang=en
https://habr.com/ru/companies/ruvds/articles/816463/
2023
https://www.ixbt.com/live/data/apacer-nas-ssd-obzor-ssd-sozdannogo-dlya-ispolzovaniya-v-nas.html
2021

Просмотреть файл

@ -15,6 +15,9 @@ https://www.youtube.com/c/FondMX
https://www.youtube.com/@HazinZnaet
https://www.youtube.com/@KhazinLive
Reviews by Shelves of p283
https://www.youtube.com/playlist?list=PLrAqBheljGVEZnUtKtvKD1tSzHVMtcKZS
Hazin Speaks
https://rutube.ru/channel/26562383/
https://rutube.ru/channel/26562383/
@ -31,77 +34,13 @@ https://www.youtube.com/playlist?list=PLlN6CWUWoei9LroqwFtXEAhhNFIRsc54z
https://www.youtube.com/channel/UCuuTtB4Dzbsr7VEYffTvhLA
https://www.youtube.com/playlist?list=PLkTpcxa4iBNzKgVGMdtkkQOzyy8SLNnq5
https://www.youtube.com/channel/UCcWb4eV93-jSlrfJqg7lDRA/videos
Reviews by Shelves of p283
https://www.youtube.com/playlist?list=PLrAqBheljGVEZnUtKtvKD1tSzHVMtcKZS
articles
2022
https://khazin.ru/v-poiske-istiny/
!!!
02.09 - RU and West - Surrogate
https://iarex.ru/articles/84375.html
https://khazin.ru/o-vizite-makrona/
https://m.business-gazeta.ru/article/534964
Tricky Plan of Putin
http://aurora.network/articles/267-pis-ma-chitateley/98523-est-li-u-putina-khitryy-plan-i-v-chem-on-zakljuchaetsja
Hazin - Oleg Vadimovich Grigoriev - Problem of Risks in Modern Economy
https://khazin.ru/o-grigorev-m-hazin-problema-riskov-v-sovremennoj-ekonomike/
!!!
2018
Shegloff
https://schegloff.livejournal.com/1230896.html
2005
Hazin - What I Would Think About if I Were Rotshield
https://khazin.ru/m-hazin-o-chem-by-ya-dumal-esli-by-byl-rotshildom-skazka-dlya-politologov-i-makroekonomistov/
audiobooks
https://www.youtube.com/playlist?list=PLYUwSVVVGUHGTFMZ6uaGe6WbMTcq8HW-n
books
http://flibusta.site/a/35210
v1
http://flibusta.site/b/721476
https://www.wildberries.by/product?card=145556656
https://www.wildberries.by/product?card=166925007
https://www.wildberries.by/product?card=176371183
https://www.wildberries.by/product?card=147771548
2023
Crisis and Power 2nd ed
http://flibusta.site/b/721476
https://ozon.by/product/krizis-i-vlast-t-1-lestnitsa-v-nebo-2-e-izd-dop-i-ispr-shcheglov-sergey-igorevich-hazin-865793063/
! 36 bin
https://www.wildberries.by/product?card=150218311&option=251898635
https://день-магазин.рф/39716-krizis-i-vlast-tom-ii-ludi-vlasti-dialogi-o-velikikh
https://день-магазин.рф/39717-krizis-i-vlast-tom-i-lestnitsa-v-nebo-izdanie-vtoroe
https://www.youtube.com/playlist?list=PLdn0ORi5Tv8MOVRDkM4oQbxtv9SL9g0ZG
https://mybooks.by/hudozhestvennaya_literatura/izdatelstva/ripol-klassik/krizis-i-vlast-tom-i-lestnica-v-nebo/
2022
HazinScheglov - Stairs to Heaven II
https://www.wildberries.by/product?card=148736284
2019
Stairs to Sky
45E0F980A580468E209B7A914170BAEB
EDE456CCDD1F82276D9617BDD8F939B8
A08C1D027D774617BC8B9A6AC7220240
035BE1C0C7D219F8EE4833EA7C60EA19
https://khazin.ru/literature/m-hazin-s-shheglov-lestnicza-v-nebo-vtoroe-izdanie-2-toma/
Memories about Future 2nd ed
46556C6D043470009AA5D5EC36669AA8
https://www.youtube.com/playlist?list=PLtnoA8Ys77oT1igs0W-XP_A1m4nh7irLB
https://cinecon.livejournal.com/38989.html
2009
Crisis Theory
37719A97D0E22A81DFD7B11FF1304C78
2003
Pax Americana
45F2919ED6489DDF1C2E82EFF0F8CA23
6F75F5D153F04BC02B8BCDAEB9151FE8
C08784FD90F696056183D5BE0F37A0E8
63A43577EA282E5D1FC532BDFA18149F
others book
Egishyants - 2006 - Ragnarek
https://www.economics.kiev.ua/?id=136&view=articles
2024
ZonaKZ - Iglikova - United West and Beneficiars of 1:01:14
https://www.youtube.com/watch?v=3solrWzpWSM
! 15:00 - Genesis of Venetians - 1688 - glorious revolution
https://ru.wikipedia.org/wiki/Славная_революция
Vilhelm III Oranskiy
LawAnOrder - 06.02 - Dudnik - Hazin of 41:50
https://www.youtube.com/watch?v=wZgGWttcw0w
LawAnOrder - 05.26 - Dudnik - Hazin of 33:43
@ -1347,3 +1286,75 @@ PeterBY - Hazin vs Chalyi of 1:04:17
2008
EchoMoscow - Guriev - Hazin - Discussion of 47:11
https://www.youtube.com/watch?v=U8duzvRxUDg
articles
2022
https://khazin.ru/v-poiske-istiny/
!!!
02.09 - RU and West - Surrogate
https://iarex.ru/articles/84375.html
https://khazin.ru/o-vizite-makrona/
https://m.business-gazeta.ru/article/534964
Tricky Plan of Putin
http://aurora.network/articles/267-pis-ma-chitateley/98523-est-li-u-putina-khitryy-plan-i-v-chem-on-zakljuchaetsja
Hazin - Oleg Vadimovich Grigoriev - Problem of Risks in Modern Economy
https://khazin.ru/o-grigorev-m-hazin-problema-riskov-v-sovremennoj-ekonomike/
!!!
2018
Shegloff
https://schegloff.livejournal.com/1230896.html
2005
Hazin - What I Would Think About if I Were Rotshield
https://khazin.ru/m-hazin-o-chem-by-ya-dumal-esli-by-byl-rotshildom-skazka-dlya-politologov-i-makroekonomistov/
audiobooks
https://www.youtube.com/playlist?list=PLYUwSVVVGUHGTFMZ6uaGe6WbMTcq8HW-n
books
http://flibusta.site/a/35210
v1
http://flibusta.site/b/721476
https://www.wildberries.by/product?card=145556656
https://www.wildberries.by/product?card=166925007
https://www.wildberries.by/product?card=176371183
https://www.wildberries.by/product?card=147771548
2023
Crisis and Power 2nd ed
http://flibusta.site/b/721476
https://ozon.by/product/krizis-i-vlast-t-1-lestnitsa-v-nebo-2-e-izd-dop-i-ispr-shcheglov-sergey-igorevich-hazin-865793063/
! 36 bin
https://www.wildberries.by/product?card=150218311&option=251898635
https://день-магазин.рф/39716-krizis-i-vlast-tom-ii-ludi-vlasti-dialogi-o-velikikh
https://день-магазин.рф/39717-krizis-i-vlast-tom-i-lestnitsa-v-nebo-izdanie-vtoroe
https://www.youtube.com/playlist?list=PLdn0ORi5Tv8MOVRDkM4oQbxtv9SL9g0ZG
https://mybooks.by/hudozhestvennaya_literatura/izdatelstva/ripol-klassik/krizis-i-vlast-tom-i-lestnica-v-nebo/
2022
HazinScheglov - Stairs to Heaven II
https://www.wildberries.by/product?card=148736284
2019
Stairs to Sky
45E0F980A580468E209B7A914170BAEB
EDE456CCDD1F82276D9617BDD8F939B8
A08C1D027D774617BC8B9A6AC7220240
035BE1C0C7D219F8EE4833EA7C60EA19
https://khazin.ru/literature/m-hazin-s-shheglov-lestnicza-v-nebo-vtoroe-izdanie-2-toma/
Memories about Future 2nd ed
46556C6D043470009AA5D5EC36669AA8
https://www.youtube.com/playlist?list=PLtnoA8Ys77oT1igs0W-XP_A1m4nh7irLB
https://cinecon.livejournal.com/38989.html
2009
Crisis Theory
37719A97D0E22A81DFD7B11FF1304C78
2003
Pax Americana
45F2919ED6489DDF1C2E82EFF0F8CA23
6F75F5D153F04BC02B8BCDAEB9151FE8
C08784FD90F696056183D5BE0F37A0E8
63A43577EA282E5D1FC532BDFA18149F
others book
Egishyants - 2006 - Ragnarek
https://www.economics.kiev.ua/?id=136&view=articles

Просмотреть файл

@ -29,6 +29,11 @@ Michael Mann
books: Fashism, Dark Side of Democracy
2024
RUPoliticalCultureInstitute - 05.24 - Varshavskiy - Gevorgyan - We need to propose own world project of 1:28:46
https://www.youtube.com/watch?v=Y7b2BWKj6Z8
! British Ost-Indian Company - Cartel Conspiracy
! Sanyal Biswarup
! Problem not in resources (sum of), but in ORGanization of resources
RUPoliticalCultureInstitute - 05.24 - Gevorgyan - Zaytsev - Deatch of Roisi of 2:10:28
https://www.youtube.com/watch?v=Nk8zUVAUuH0
RUPoliticalCultureInstitute - 04.26 - Rode - Gevorgyan - War is a Transformation of RU 1:00:00 of 1:08:55

8
nontech/song/pop/gb/dua-lipa.txt Обычный файл
Просмотреть файл

@ -0,0 +1,8 @@
https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BF%D0%B0,_%D0%94%D1%83%D0%B0
https://www.youtube.com/@dualipa/videos
https://www.youtube.com/channel/UC-J-KZfRV8c13fOCkhXdLiQ
2023
Dua Lipa - Houdini (Extended Edit) [Official Audio] of 5:54
https://www.youtube.com/watch?v=YIvwCIwDQT8

Просмотреть файл

@ -1,4 +1,8 @@
2024
Josean Martinez - How I Setup Neovim To Make It AMAZING in 2024: The Ultimate Guide 0:00 of 1:26:34
https://www.youtube.com/watch?v=6pAG3BHurdM
https://www.josean.com/posts/how-to-setup-neovim-2024
https://github.com/josean-dev/dev-environment-files
apakhomov - Learn NeoVim of p7
https://www.youtube.com/playlist?list=PLzWf2xLEjn8bnlh2yJ3W0eYbvcwkwA5F2
https://github.com/PakhomovAlexander/config.nvim/tree/nvim-from-scratch

Просмотреть файл

@ -4,6 +4,8 @@ https://ostreedev.github.io/ostree/reference/
... and other stuff are from linux/packaging/ostree
https://coreos.github.io/rpm-ostree/
https://coreos.github.io/rpm-ostree/apply-live/
https://github.com/projectatomic/rpm-ostree
2024

Просмотреть файл

@ -3,6 +3,8 @@ https://silverblue.fedoraproject.org/download
https://docs.fedoraproject.org/en-US/fedora-silverblue/
https://www.dvlv.co.uk/pages/a-beginners-guide-to-fedora-silverblue.html
2022
https://fedoramagazine.org/how-i-customize-fedora-silverblue-and-fedora-kinoite/
2021

Просмотреть файл

@ -7,6 +7,9 @@ https://stackify.com/dependency-inversion-principle/
https://github.com/pg07codes/SOLID-principles
2024
https://habr.com/ru/companies/otus/articles/818667/
! srp in py
2023
https://medium.com/@reer217/open-closed-principle-extending-your-code-without-modification-523109ccfec2
https://nuancesprog.ru/p/19073/

Просмотреть файл

@ -1,5 +1,17 @@
https://github.com/heynickc/awesome-ddd
2023
Devoxx - REST next level : Crafting domain driven web APIs By Julien Topçu 0:00 of 50:52
https://www.youtube.com/watch?v=bHc8Gudrhdo
2022
https://learn.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/
2020
https://habr.com/ru/companies/dododev/articles/489352/
! DDD Ubiquitos Language
https://habr.com/ru/companies/dododev/articles/523540/
! need to read
2019
https://habr.com/ru/company/jugru/blog/440772/
2009
https://www.infoq.com/articles/ddd-contextmapping/
! need to read

Просмотреть файл

@ -1,5 +1,7 @@
https://microservices.io/patterns/microservices.html
2024
https://cloud.vk.com/blog/26-osnovnyh-patternov-mikroservisnoj-razrabotki
2016
https://www.nginx.com/blog/deploying-microservices/
https://www.nginx.com/learn/microservices-architecture

3
pl/cross/ql/graphql/docs/critice.txt Обычный файл
Просмотреть файл

@ -0,0 +1,3 @@
2024
https://bessey.dev/blog/2024/05/24/why-im-over-graphql/
https://habr.com/ru/articles/818765/

Просмотреть файл

@ -1,11 +1,17 @@
????
https://www.manning.com/liveprojectseries/elasticsearch-for-a-search-api-ser
2023
AzarmiVestal - Vector Search for Practitioners with Elastic
21C3D4250A746422A7489BC2647611D8
F6E8FC15355E706D4CCD8ACF700BA447
Konda - Elasticsearch in Action 2nd ed
91600B4A9C57C27434776716E4CF3CF2
552D72CF65C8F44B00E009FCB9C8E108
8CB49DB449796FD675942481B85FD59F
magnet:?xt=urn:btih:3723a70cf2a6d1c50a6780652afdd46bc2e6a2f8
2022
Athick - Getting Started with Elastic Stack 8
3FF54BC1B55F6461CA2512EE2CAB3D49
Konda - Elasticsearch in Action 2nd ed EAP v7
9AC9E043D58F79298BDE2C5A26F4D852
magnet:?xt=urn:btih:3723a70cf2a6d1c50a6780652afdd46bc2e6a2f8
Paro - Elasticsearch 8x Cookbook 5th ed 750p
64FFA70AA97D0A84C89E0F6ED9B5E0ED
magnet:?xt=urn:btih:65a346ff815ad0df107e6c23b8886993504c29cf

Просмотреть файл

@ -2,3 +2,4 @@ https://habr.com/ru/articles/265061/
2024
https://habr.com/ru/companies/magnit/articles/814573/
! DynamicUpdate

Просмотреть файл

@ -1 +1,4 @@
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/util/Lazy.html
2024
https://habr.com/ru/companies/otus/articles/819357/

Просмотреть файл

@ -0,0 +1,4 @@
2023
Kousen - Mockito Made Clear
97E841543D89E471BE171FA8B4CAF53B2023
! 87p

Просмотреть файл

@ -1,5 +1,6 @@
2024
https://www.melconway.com/Home/pdf/compiler.pdf
https://habr.com/ru/articles/818847/
https://habr.com/ru/articles/817047/
https://habr.com/ru/articles/815407/
2022

3
pl/py/libfws/ui/textual.txt Обычный файл
Просмотреть файл

@ -0,0 +1,3 @@
https://textual.textualize.io/
https://www.youtube.com/@Textualize-official/videos