Специальные ссылки

Перейти к основному контентуСправка по использованию специальных возможностей
Оставить отзыв о специальных возможностях

Фильтры и темы

Режим ИИ
Все
Картинки
Видео
Новости
Ещё
Покупки
Карты
Книги
Авиабилеты
Произошла ошибка. Ваша история поиска не была удалена.

Начать новый поиск
История режима ИИ

Удалить историю поиска?

Вы не сможете вернуться к этим ответам.
Удалить все
Настроить общедоступные ссылки
Моя история Google Поиска

Удалить поисковой запрос?

Вы не сможете вернуться к этому ответу.
История режима ИИ

Удалить историю поиска?

Вы не сможете вернуться к этим ответам.
Удалить все
Настроить общедоступные ссылки
Моя история Google Поиска
Нет истории режима ИИ
Продолжайте работу с того места, где остановились.
Сохраните историю, чтобы быстрее получать ответы на дополнительные запросы, просматривать результаты по прежним запросам и пользоваться другими функциями.
Общедоступные ссылки
Ваши общедоступные ссылки автоматически удаляются по прошествии 13 месяцев. Если вы удалите какую-либо ссылку, вы не потеряете доступ к цепочке сообщений в истории режима ИИ. Подробнее

Удалить все общедоступные ссылки?

Если удалить все общедоступные ссылки, контент по ним станет недоступным для всех. Удалив какую-либо ссылку, вы не потеряете доступ к цепочке сообщений в истории режима ИИ.
Подробнее
Ссылок пока нет.
Загрузка...
Что-то пошло не так. Ваши общедоступные ссылки не были созданы.
Представляем режим ИИ
Задавайте сложные вопросы и получайте развернутые ответы.
Закрыть
Другие способы ввода
Микрофон
Загрузить изображение
Отправить
if(isset($_GET['dealkp'])){ $dealkp_n = (int)$_GET['dealkp']; $dealkp_sort = 'ORDER BY me.date_update,deal_update';//$_GET['sort']=deal_update 1 = deal_update array $dealkp_sort_add = 'DESC';//$_GET['assor']=desc или asc 1 или 0 array $dealkp = "SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,ord.date_up_notis,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update,ord.users_order_ids FROM orders ord LEFT JOIN message me ON ord.id = me.order_id LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox WHERE status_deal='$dealkp_n' AND status_kp IS NOT NULL GROUP BY ord.id $dealkp_sort $dealkp_sort_add LIMIT 0,18";//!!! if($_GET['dealkp']=='all' && empty($_GET['order'])){//!!! && empty($_GET['order']) FIX ONLY ORDER OFF status $dealkp = "SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,ord.date_up_notis,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update,ord.users_order_ids FROM orders ord LEFT JOIN message me ON ord.id = me.order_id LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox WHERE status_kp IS NOT NULL -- WHERE status_deal='$dealkp_n' GROUP BY ord.id ORDER BY me.date_update,deal_update DESC LIMIT 0,18"; $dealkp_n='all';//all = 0 } }else {//default home index ALL | 0 if($dealkp_n === '' && !is_numeric($dealkp_n)){ $dealkp_sort = " WHERE status_kp IS NOT NULL AND ord.status_deal!='100' AND ord.status_deal!='150' "; //ord.status_deal < 100 $dealkp_n='all'; //ОТКРЫВАТЬ СТРАНИЦУ с какого статуса $dealkp_n='0'; --WHERE status_deal='$dealkp_n' }else{ $dealkp_sort = " WHERE status_deal='$dealkp_n' AND status_kp IS NOT NULL AND ord.status_deal!='100' AND ord.status_deal!='150' "; } $dealkp = "SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,ord.date_up_notis,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update,ord.users_order_ids FROM orders ord LEFT JOIN message me ON ord.id = me.order_id LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox $dealkp_sort -- status_deal='$dealkp_n' Notice: Undefined index: in crm.php on line 165 - status_kp NULL GROUP BY ord.id ORDER BY me.date_update,deal_update DESC LIMIT 0,18"; } //$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE status_kp=0 ORDER BY date_create,date_update ASC "); //$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE status_kp='$stkp' ORDER BY date_create,date_update ASC "); /**$Result = $SQLite3->query("$dealkp"); $DEAL_ALL = ResultSet($Result);*/ // Перед выполнением основного запроса $explain_query = "EXPLAIN " . $dealkp; $explain_result = $mysqli->query($explain_query); $explain_data = ResultSet($mysqli, $explain_result); error_log("EXPLAIN result for query:"); foreach ($explain_data as $row) { //error_log(print_r($row, true)); echo print_r($row, true); } echo '<pre>',print_r($GLOBALS,1); exit; Array ( [id] => 1 [select_type] => SIMPLE [table] => me [partitions] => [type] => ALL [possible_keys] => [key] => [key_len] => [ref] => [rows] => 10803 [filtered] => 100.00 [Extra] => Using where; Using temporary; Using filesort ) Array ( [id] => 1 [select_type] => SIMPLE [table] => ord [partitions] => [type] => eq_ref [possible_keys] => PRIMARY [key] => PRIMARY [key_len] => 8 [ref] => crm_traceline.me.order_id [rows] => 1 [filtered] => 81.00 [Extra] => Using where ) Array ( [id] => 1 [select_type] => SIMPLE [table] => im [partitions] => [type] => ALL [possible_keys] => [key] => [key_len] => [ref] => [rows] => 38384 [filtered] => 9.00 [Extra] => Using where; Using join buffer (Block Nested Loop) )
Based on your
EXPLAIN results from January 2026, the query is suffering from severe performance bottlenecks due to missing indexes and suboptimal join execution. Specifically, it is using a Block Nested Loop (BNL) join for the inbox_mail (im) table and generating a massive temporary table with a manual sort (Using temporary; Using filesort). 
Analysis of the EXPLAIN Results 
  • Table me (message): It is doing a full table scan (type: ALL) of 10,803 rows. This is the "driving" table but lacks an index to filter or sort efficiently.
  • Table im (inbox_mail): It scans 38,384 rows using Block Nested Loop because no index is found for the join condition im.uid = me.uid_inbox.
  • Table ord (orders): This is the only well-indexed part (type: eq_ref using PRIMARY).
  • Extra (Using temporary; Using filesort): MySQL is forced to create a temporary table on disk because you are grouping and sorting columns from different tables (me.date_update and ord.deal_update). 
Recommended Optimizations 
1. Add Crucial Indexes 
The most immediate fix is to add indexes on the columns used for joining and filtering. Run these commands: 
sql
-- Fix the join between message and inbox_mail
CREATE INDEX idx_me_uid_inbox ON message(uid_inbox);
CREATE INDEX idx_im_uid ON inbox_mail(uid);

-- Fix the join between orders and message
CREATE INDEX idx_me_order_id ON message(order_id);

-- Help the sorting and filtering
CREATE INDEX idx_ord_status_deal ON orders(status_deal);
Используйте код с осторожностью.
2. Rewrite the Query Logic 
The GROUP BY ord.id is likely intended to handle cases where one order has multiple messages. However, since you are sorting by me.date_update (from the joined table), MySQL cannot use an index for the order. 
Revised Query Strategy:
If you want to keep the current structure but make it faster, ensure you only join what is necessary. Using STRAIGHT_JOIN can sometimes force a better order, but fixing the indexes above is more reliable. 
3. Specific Code Fixes 
  • In your PHP: The variable $dealkp_sort_add is set to DESC, but the ORDER BY clause in your first SELECT query uses $dealkp_sort $dealkp_sort_add, resulting in ORDER BY me.date_update,deal_update DESC. This sorts by date_update ASC (default) then deal_update DESC. If you want both descending, use:
    $dealkp_sort = 'ORDER BY me.date_update DESC, ord.deal_update DESC';
  • Block Nested Loop: Adding the index on im.uid will eliminate the BNL join, which is currently your biggest performance drain. 
Создание общедоступной ссылки…
Спасибо!
Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
Оставить подробный отзывСообщить о проблемеЗакрыть
  • MySQL performance, inner join, how to avoid Using temporary ...
    25 июл. 2010 г. — This question is somewhat outdated, but I did find it, and so will other people. Mysql uses temporary if the ORDER ...
    Stack Overflow
  • How to avoid Using temporary; Using filesort on MySql Query
    15 сент. 2021 г. — There are many cases where it is effectively impossible to avoid "using temporary, using filesort". "Filesort" doe...
    Stack Overflow
  • 10.2.1.7 Nested-Loop Join Algorithms
    A Block Nested-Loop (BNL) join algorithm uses buffering of rows read in outer loops to reduce the number of times that tables in i...
    Oracle Help Center
  • What does Using join buffer (Block Nested Loop) mean with ...
    3 февр. 2020 г. — 2. dev.mysql.com/doc/refman/8.0/en/… Barmar. – Barmar. 2020-02-04 14:11:57 +00:00. Commented Feb 4, 2020 at 14:11. ...
    Stack Overflow
  • MySQL performance, inner join, how to avoid Using temporary ...
    25 июл. 2010 г. — This question is somewhat outdated, but I did find it, and so will other people. Mysql uses temporary if the ORDER ...
    Stack Overflow
  • How to avoid Using temporary; Using filesort on MySql Query
    15 сент. 2021 г. — There are many cases where it is effectively impossible to avoid "using temporary, using filesort". "Filesort" doe...
    Stack Overflow
  • 10.2.1.7 Nested-Loop Join Algorithms
    A Block Nested-Loop (BNL) join algorithm uses buffering of rows read in outer loops to reduce the number of times that tables in i...
    Oracle Help Center
Показать все
по русски
Судя по результатам
EXPLAIN на январь 2026 года, ваш запрос работает крайне неэффективно. Основные проблемы: полное сканирование таблиц (ALL), использование буфера соединений (Block Nested Loop) и создание огромных временных таблиц для сортировки (Using temporary; Using filesort). 
Анализ проблем 
  1. Таблица im (inbox_mail): MySQL сканирует 38 384 строки для каждой итерации, потому что нет индекса на колонке uid. Это главная причина тормозов.
  2. Таблица me (message): Тип ALL (10 803 строки). MySQL не может эффективно связать сообщения с заказами.
  3. Сортировка: Вы сортируете по полям из разных таблиц (me.date_update и ord.deal_update), что заставляет базу данных создавать временную таблицу на диске. 

Решение: Оптимизация индексов 
Чтобы запрос летал, выполните следующие SQL-запросы в вашей базе данных: 
sql
-- 1. Индекс для связи сообщений и почты (убирает Block Nested Loop)
CREATE INDEX idx_me_uid_inbox ON message(uid_inbox);
CREATE INDEX idx_im_uid ON inbox_mail(uid);

-- 2. Индекс для связи заказов и сообщений
CREATE INDEX idx_me_order_id ON message(order_id);

-- 3. Индекс для фильтрации по статусу сделки
CREATE INDEX idx_ord_status_deal ON orders(status_deal);
Используйте код с осторожностью.

Ошибки в PHP-коде 
В вашем коде есть логические недочеты, которые могут привести к ошибкам в 2026 году: 
  1. Сортировка:
    $dealkp_sort = 'ORDER BY me.date_update,deal_update'; + $dealkp_sort_add = 'DESC';
    В итоге получается ORDER BY me.date_update, deal_update DESC.
    Это значит, что первое поле сортируется ПО ВОЗРАСТАНИЮ (по умолчанию), а второе — по убыванию. Если вы хотите, чтобы новые записи были сверху, оба поля должны быть DESC.
    Исправьте на: $dealkp_sort = 'ORDER BY me.date_update DESC, ord.deal_update DESC';
  2. Безопасность (SQL Injection):
    Вы приводите (int)$_GET['dealkp'], но в блоке if($_GET['dealkp']=='all') используете сырую строку из URL. Хотя в данном контексте это не критично, лучше использовать подготовленные выражения (prepared statements).
  3. Неопределенная переменная:
    В блоке else используется $dealkp_n, но если $_GET['dealkp'] не задан, эта переменная может быть не инициализирована (Notice: Undefined variable). Добавьте $dealkp_n = 'all'; в самое начало скрипта.
     
Как должен выглядеть запрос после оптимизации индексов: 
После добавления индексов, EXPLAIN должен показать тип ref или eq_ref для всех таблиц, а количество обрабатываемых строк (rows) должно резко сократиться до единиц или десятков. Это ускорит загрузку страницы в десятки раз. 
Создание общедоступной ссылки…
Спасибо!
Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
Оставить подробный отзывСообщить о проблемеЗакрыть
      Показать все
      По какому принципу создавать индексы ?
      Индексы в 2026 году по-прежнему создаются на основе анализа того, как база данных ищет, соединяет и сортирует данные. Главный принцип:
      индексировать нужно не колонки, а пути доступа в конкретных запросах. 
      Основные правила выбора колонок для индексов: 
      1. Колонки для соединений (JOIN) 
      Всегда индексируйте внешние ключи и поля, по которым происходит связывание таблиц. 
      • Пример: В вашем запросе это me.order_id, me.uid_inbox и im.uid. Если в EXPLAIN вы видите «Block Nested Loop» или тип «ALL» на таблице в JOIN, значит, индекса для связи не хватает. 
      2. Колонки фильтрации (WHERE) 
      Индексируйте поля, которые используются для ограничения выборки. 
      • Селективность: Выбирайте колонки с большой долей уникальных значений (например, id, email). Поля с низкой селективностью (например, «пол» или «статус», где всего 2–3 варианта на миллион строк) часто бесполезны для индексации, так как базе проще просканировать таблицу целиком.
      • В вашем случае: Колонки status_deal и status_kp — отличные кандидаты. 
      3. Колонки для сортировки и группировки (ORDER BY, GROUP BY) 
      Индексы помогают избежать «Filesort» (сортировки на диске). 
      • Если вы делаете ORDER BY date_update DESC, индекс на date_update позволит базе сразу брать строки в нужном порядке.
      • Важно: Для GROUP BY индекс должен включать все колонки группировки в том же порядке, в котором они указаны в запросе. 
      4. Составные индексы (Composite Indexes) 
      Если запрос часто фильтрует или сортирует по нескольким полям одновременно, создавайте один индекс на несколько колонок. 
      • Порядок важен: Первой в индексе должна идти колонка с самой высокой уникальностью (селективностью).
      • Пример: Если вы ищете по статусу и дате, индекс (status, date) будет работать лучше, чем два отдельных индекса. 
      5. Когда индексы НЕ нужны 
      • Маленькие таблицы: Если в таблице менее пары сотен строк, поиск по ней и так мгновенный.
      • Частые обновления: Каждый индекс замедляет операции INSERT, UPDATE и DELETE, так как базе нужно обновлять не только данные, но и дерево индекса.
      • Много NULL: Колонки, где большая часть значений — NULL, индексируются неэффективно. 
      Совет на 2026 год: Всегда проверяйте результат через EXPLAIN. Если после добавления индекса в колонке type появилось index или ref, а rows уменьшилось — индекс работает правильно. 
      Создание общедоступной ссылки…
      Спасибо!
      Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
      Оставить подробный отзывСообщить о проблемеЗакрыть
      • Best Practices for Database Indexing to Improve Query ...
        20 сент. 2025 г. — 1. Understand What Indexes Do** An index is like a book's table of contents — it helps the database quickly find r...
        DEV Community
      • MySQL Index Usage in JOIN Indexes - DataCamp
        Index selective columns. Focus on columns with high selectivity (unique values) to maximize performance gains. Selectivity refers ...
        DataCamp
      • Common JOIN Query Indexing Mistakes to Avoid - Inspector.dev
        19 янв. 2025 г. — Index both sides of the JOIN: For INNER JOINs, index columns in both tables. For LEFT JOINs, prioritize the optiona...
        inspector.dev
      Показать все
      • Best Practices for Database Indexing to Improve Query ...
        20 сент. 2025 г. — 1. Understand What Indexes Do** An index is like a book's table of contents — it helps the database quickly find r...
        DEV Community
      • MySQL Index Usage in JOIN Indexes - DataCamp
        Index selective columns. Focus on columns with high selectivity (unique values) to maximize performance gains. Selectivity refers ...
        DataCamp
      • Common JOIN Query Indexing Mistakes to Avoid - Inspector.dev
        19 янв. 2025 г. — Index both sides of the JOIN: For INNER JOINs, index columns in both tables. For LEFT JOINs, prioritize the optiona...
        inspector.dev
      • MySQL Indexing Best Practices: A Comprehensive Guide
        30 янв. 2025 г. — ✅ Use indexes to avoid expensive filesort. Example: SELECT * FROM employees ORDER BY last_name; ✔️ Create an index:
        Medium
      • Deep Dive into MySQL Indexing Strategies - Alibaba Cloud
        9 сент. 2024 г. — From the above tests, we derive the following principles for optimizing ORDER BY: * Create appropriate indexes for ...
        Alibaba Cloud
      • Оптимизация запросов в SQL: советы и трюки для ...
        26 янв. 2025 г. — Оптимизация запросов в SQL: советы и трюки для программистов | СберТех
        Platform V
      • MySQL 8.4 Reference Manual :: 10.2.1.17 GROUP BY Optimization
        1.17 GROUP BY Optimization. The most general way to satisfy a GROUP BY clause is to scan the whole table and create a new temporar...
        MySQL :: Developer Zone
      • Все, что необходимо знать про индексы MS SQL - Otus
        17 июн. 2021 г. — Indexes имеют и недостатки: * требуется много места на дисковом пространстве и в оперативной памяти. Чем длиннее кл...
        OTUS - Онлайн-образование
      • Что такое индексация столбцов ? Полное техническое руководство по индексации данных...
        Переведено — Столбцы с большим количеством уникальных значений, например, email или user_id , выигрывают больше всего, поскольку инде...
        Hydrolix
      • Индексы: когда использовать , а когда избегать в SQL. | Автор: Викрам Гупта
        Переведено — Индексы не следует использовать для таблиц, содержащих мало записей , а также для таблиц с частыми и крупными пакетными ...
        Medium
      • Выбор правильного индекса : основы проектирования баз данных | Патрик Карш
        Переведено — Столбцы с высокой кардинальностью, такие как уникальные идентификаторы, являются отличными кандидатами для индексировани...
        Medium
      Чем больше индекс тем лучше или хуже ?
      Индексы — это как алфавитный указатель в конце толстой книги. С ним легче найти нужную страницу, но сама книга становится толще, а её издание — дороже.
       
      В 2026 году ответ однозначный: больше — не значит лучше. Существует «золотая середина», после которой избыток индексов начинает вредить системе. 
      Вот основные причины, почему «слишком много» — это плохо: 
      1. Замедление записи (INSERT, UPDATE, DELETE) 
      Каждый раз, когда вы добавляете или меняете строку в таблице, база данных обязана обновить все индексы, связанные с этой таблицей. 
      • Если у вас 10 индексов, одна операция INSERT превращается в 11 операций записи.
      • На высоконагруженных проектах это создает «бутылочное горлышко» — база не успевает записывать данные. 
      2. Расход оперативной памяти (RAM) 
      Для быстрой работы индексы должны храниться в оперативной памяти (в буферном пуле). 
      • Если индексов слишком много, они перестают помещаться в RAM и начинают читаться с диска.
      • Это приводит к парадоксу: вы добавили индекс, чтобы ускорить поиск, но из-за нехватки памяти вся база начала тормозить. 
      3. Размер на диске 
      Индексы могут занимать больше места, чем сами данные. Если у вас таблица на 10 ГБ, неудачный набор индексов может раздуть её до 30–40 ГБ. 
      4. Ошибки планировщика (Optimizer Confusion) 
      Когда индексов слишком много, оптимизатор MySQL тратит больше времени на анализ того, какой из них выбрать. Иногда он ошибается и выбирает не самый эффективный путь, что замедляет запрос. 

      Правильный подход («Принцип разумной достаточности»): 
      1. Удаляйте неиспользуемые индексы: В современных версиях БД (включая 2026 год) есть инструменты мониторинга, которые показывают, использовался ли индекс хоть раз за последний месяц. Если нет — удаляйте.
      2. Используйте составные индексы вместо одиночных: Один индекс на (status, date_create) часто лучше, чем два отдельных индекса на status и на date_create.
      3. Индексируйте только то, что нужно: Не нужно индексировать каждое поле в таблице «на всякий случай». Индекс должен создаваться только под конкретный тяжелый запрос.
      4. Следите за шириной индекса: Индекс по числу (INT) работает быстрее и занимает меньше места, чем индекс по длинной строке (VARCHAR). 
      Итог: Индекс — это лекарство. В правильной дозе оно лечит (ускоряет SELECT), в избыточной — отравляет (тормозит INSERT и съедает память). Создавайте индексы только там, где EXPLAIN показывает явные проблемы. 
      Создание общедоступной ссылки…
      Спасибо!
      Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
      Оставить подробный отзывСообщить о проблемеЗакрыть
          Показать все
          Возможно как то понять где ставить индексы а где нет ? Анализ какой то запроса ?
          Да, понять, где нужны индексы, можно с помощью четкого алгоритма анализа. В 2026 году основным инструментом остается глубокое чтение плана выполнения запроса.
           
          1. Используйте EXPLAIN ANALYZE 
          Обычный EXPLAIN (который вы уже сделали) показывает только план, но EXPLAIN ANALYZE (доступен в MySQL 8.0+) выполняет запрос и показывает реальное время на каждом этапе. 
          Как читать: 
          • Ищите строки с самым высоким значением actual time. Это и есть ваше «узкое место».
          • Если в блоке JOIN или FILTER тратится 90% времени, значит, именно там не хватает индекса. 
          2. Принцип «Тройного поиска» (Где именно ставить?) 
          Смотрите на структуру вашего SQL-запроса. Индексы нужны в трех местах: 
          1. Секция JOIN ... ON: Колонки, по которым вы соединяете таблицы (например, me.order_id = ord.id). В EXPLAIN это лечится, когда тип соединения меняется с ALL на ref или eq_ref.
          2. Секция WHERE: Поля, по которым идет фильтрация (например, status_deal = '...'). Если EXPLAIN показывает большое число в колонке rows при наличии фильтра, индекс необходим.
          3. Секция ORDER BY / GROUP BY: Если в колонке Extra вы видите Using filesort, это значит, что база сортирует данные «вручную» в памяти или на диске. Индекс на поле сортировки уберет эту надпись и ускорит выдачу. 
          3. Автоматический поиск через Slow Query Log 
          Вы можете заставить саму базу данных подсказывать вам проблемные места. Включите в конфиге (my.cnf) следующие параметры: 
          ini
          slow_query_log = 1          # Включить лог медленных запросов
          long_query_time = 1         # Логировать всё, что дольше 1 секунды
          log_queries_not_using_indexes = 1 # Логировать все запросы, которые НЕ используют индексы
          
          Используйте код с осторожностью.
          Через день работы сайта загляните в файл лога — там будет готовый список кандидатов на оптимизацию. 
          4. Оценка селективности (Важное правило) 
          Прежде чем ставить индекс, проверьте колонку запросом:
          SELECT COUNT(DISTINCT column_name) / COUNT(*) FROM table_name; 
          • Если результат близок к 1, индекс будет идеальным (уникальные значения).
          • Если результат близок к 0 (например, 0.001), индекс может быть бесполезен (слишком много одинаковых значений, базе проще прочитать всё подряд). 
          Резюме для вашего случая:
          Ваш прошлый EXPLAIN показал Using join buffer (Block Nested Loop) для таблицы im. Это «крик о помощи» от базы данных: поставьте индекс на im.uid, чтобы она перестала перебирать тысячи строк в цикле. 
          Создание общедоступной ссылки…
          Спасибо!
          Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
          Оставить подробный отзывСообщить о проблемеЗакрыть
          • How do I decide what columns need to be indexed? - Reddit
            28 сент. 2025 г. — This is the reactive approach. In the proactive approach you need to know what sort of queries are being run on yo...
            Reddit
          • Choosing the Right Index: Database Design Basics | by Patrick Karsh
            22 сент. 2023 г. — Choosing the Right Columns to Index Look for patterns in query filters and join conditions. Are there specific col...
            Medium
          • Устранение неполадок в запросах MySQL | 8HOST.COM
            28 мар. 2019 г. — log_queries_not_using_indexes: позволяет MySQL логировать все запросы без индекса в файл /var/log/mysql-slow.log. Э...
            8host.com
          • Диагностика нагрузки на MySQL: включение slow-query-log
            30 нояб. 2009 г. — В блок [mysql] добавляем следующее: # логгируем запросы длиннее 5 секунд long_query_time = 10 log-slow-queries = /
            www.stableit.blog
          • Использование EXPLAIN. Улучшение запросов - Хабр
            30 янв. 2014 г. — После EXPLAIN в запросе вы можете использовать ключевое слово EXTENDED и MySQL покажет вам дополнительную информаци...
            Хабр
          • MySQL Indexing Best Practices: A Comprehensive Guide
            30 янв. 2025 г. — ✅ Use indexes to avoid expensive filesort. Example: SELECT * FROM employees ORDER BY last_name; ✔️ Create an index:
            Medium
          • Deep Dive into MySQL Indexing Strategies - Alibaba Cloud
            9 сент. 2024 г. — 6. Index Design Principles * Create indexes on tables with large data volumes and complex queries. * Create indexes...
            Alibaba Cloud
          • План выполнения MySQL EXPLAIN : анализ запросов и оптимизация производительности с помощью IDE.
            Переведено — Хотя EXPLAIN и EXPLAIN ANALYZE иногда используются как синонимы, между ними есть ключевое различие. EXPLAIN оценивает пр...
            Devart
          • How MySQL Performance Can Be Improved by Indexing - Medium
            14 мая 2025 г. — Best Practices for Indexing To maximize the benefits of indexing, follow these tips: Index Frequently Queried Column...
            Medium
          • How do I decide what columns need to be indexed? - Reddit
            28 сент. 2025 г. — This is the reactive approach. In the proactive approach you need to know what sort of queries are being run on yo...
            Reddit
          • Choosing the Right Index: Database Design Basics | by Patrick Karsh
            22 сент. 2023 г. — Choosing the Right Columns to Index Look for patterns in query filters and join conditions. Are there specific col...
            Medium
          • Устранение неполадок в запросах MySQL | 8HOST.COM
            28 мар. 2019 г. — log_queries_not_using_indexes: позволяет MySQL логировать все запросы без индекса в файл /var/log/mysql-slow.log. Э...
            8host.com
          Показать все
          Возможно как то понять где какой индекс добавить если запустить запрос ?
          Да, вы можете точно определить, какие индексы добавить, проанализировав
          план выполнения конкретного запроса. В 2026 году для этого используются как стандартные команды, так и продвинутые инструменты анализа. 
          Вот пошаговая инструкция, как «прочитать» запрос и понять, куда ставить индексы: 
          1. Используйте EXPLAIN ANALYZE 
          Это самый мощный способ. В отличие от обычного EXPLAIN, он реально запускает запрос и замеряет время каждой операции. 
          Запустите:
          EXPLAIN ANALYZE SELECT ... (ваш запрос) 
          Что искать в результате: 
          • Actual time: Смотрите, на какой таблице тратится больше всего времени (например, actual time=100.2..105.5). Если время в начале и конце сильно разнится — это «узкое место».
          • Rows: Если база ожидает 10 строк, а читает 100 000 (rows=100000), значит, фильтрация не работает. Вам нужен индекс на колонки из WHERE.
          • Filter: Если после чтения таблицы стоит Filter: (таблица.колонки), значит, база прочитала лишние данные и потом их отсеивала. Добавьте эти колонки в индекс. 
          2. Принцип «Золотого правила» (Где именно ставить?) 
          Смотрите на структуру вашего SQL и применяйте индексы по порядку: 
          Секция запроса Что индексироватьЗачем
          JOINВнешние ключи (например, me.order_id, im.uid)Убирает Block Nested Loop и ускоряет связку таблиц.
          WHEREКолонки фильтрации (например, status_deal)База сразу переходит к нужным строкам, а не сканирует всё.
          ORDER BYПоля сортировки (например, date_update)Убирает Filesort (медленную сортировку в памяти).
          3. Проверка «покрывающего индекса» 
          Если ваш запрос выбирает только несколько полей (например, SELECT id, status), попробуйте создать составной индекс, включающий эти поля. 
          • Эффект: База вообще не будет заглядывать в таблицу, она возьмет все данные прямо из файла индекса (в EXPLAIN появится надпись Using index). 
          4. Автоматические подсказки (Slow Query Log) 
          Если вы не хотите анализировать каждый запрос вручную, настройте лог медленных запросов с параметром log_queries_not_using_indexes = 1. 
          • База сама запишет в файл все запросы, которые работают медленно из-за отсутствия индексов. Вам останется только открыть этот список. 
          5. Инструменты «sys»-схемы (MySQL 8.0+) 
          В 2026 году во всех актуальных версиях MySQL есть встроенные отчеты: 
          • SELECT * FROM sys.schema_unused_indexes; — покажет индексы, которые вы создали, но которые никогда не используются (их можно удалить).
          • SELECT * FROM sys.statements_with_full_table_scans; — покажет запросы, которые сканируют таблицы целиком и остро нуждаются в индексах. 
          Важно: Не добавляйте индекс на каждую колонку. Если колонка часто обновляется (UPDATE), индекс будет тормозить запись. Ориентируйтесь только на те поля, которые реально замедляют SELECT. 
          Создание общедоступной ссылки…
          Спасибо!
          Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
          Оставить подробный отзывСообщить о проблемеЗакрыть
          • MySQL EXPLAIN ANALYZE for Index Usage Indexes - DataCamp
            Tips and Best Practices * Index selective columns. Prioritize indexing columns with high selectivity to maximize performance gains...
            DataCamp
          • Database Index Selection Guide | Aerospike
            1 мая 2025 г. — Query execution plans: When you run a SQL query, the database query optimizer decides whether to use an index. If a s...
            Aerospike
          • MySQL Indexes and Query Performance Optimization
            Documents. Performance optimization in MySQL involves techniques to improve query execution speed and efficiency, primarily by uti...
            DataCamp
          Показать все
          • How do indexes improve SQL query performance? - Milvus
            Similarly, indexes on foreign key columns speed up joins between tables by reducing the search space. However, indexes come with t...
            Milvus
          • MySQL EXPLAIN ANALYZE for Index Usage Indexes - DataCamp
            Tips and Best Practices * Index selective columns. Prioritize indexing columns with high selectivity to maximize performance gains...
            DataCamp
          • Database Index Selection Guide | Aerospike
            1 мая 2025 г. — Query execution plans: When you run a SQL query, the database query optimizer decides whether to use an index. If a s...
            Aerospike
          • MySQL Indexes and Query Performance Optimization
            Documents. Performance optimization in MySQL involves techniques to improve query execution speed and efficiency, primarily by uti...
            DataCamp
          • SQL Indexing Best Practices: Speed Up Your Queries - AI2sql
            19 февр. 2025 г. — Index Important Search/Join Columns (But Not Everything): Focus on columns that are frequently used in WHERE claus...
            AI2sql
          • Database Indexing: Unleashing the Power of ... - Dev Cookies
            5 сент. 2024 г. — 7. Indexing Best Practices. Here are some best practices to consider when working with indexes: Index Selectively: ...
            Medium
          • Выбор индексов в базах данных для highload-систем - Хабр
            4 апр. 2025 г. — Важно упомянуть покрывающие индексы: если запрос выбирает лишь столбцы, присутствующие в индексе, СУБД может выполни...
            Хабр
          • Detecting unutilized indexes in MySQL | by Samuel N Wekesa
            11 сент. 2023 г. — Since this reads the data from performance schema, it identifies index usage in the same manner as performance sch...
            Medium
          • Mastering `EXPLAIN ANALYZE` in MySQL: Optimize Your ...
            28 мар. 2025 г. — A table scan is inefficient. Let's create an index on department to speed things up: CREATE INDEX idx_department ON...
            DEV Community
          • The hidden cost of too many indexes in MySQL - Pythian
            19 авг. 2025 г. — 1. Find unused indexes. ... FROM sys. schema_unused_indexes; This option is available from MySQL 8.0+ with the perf...
            Pythian
          • Chapter 24 MySQL sys Schema - Index of /
            MySQL 5.7. 7 and higher includes the sys schema, a set of objects that helps DBAs and developers interpret data collected by the P...
            Universidade de Lisboa
          • MySQL Query Optimization: 10 Techniques(Explained with Code)
            19 дек. 2024 г. — Techniques for MySQL Query Optimization * Use Indexes: Indexes are used to speed up the retrieval of rows from the ...
            Hevo Data
          • MySQL Performance Tuning - Percona
            Slow query log parameters To enable the MySQL slow query log, you need to modify the MySQL server configuration file (usually my. ...
            Percona
          mysql 5.7
          Думаю…
          Поиск…
          Для MySQL 5.7 в 2026 году методика остается классической. Поскольку в версии 5.7 еще нет команды
          EXPLAIN ANALYZE (она появилась только в 8.0), мы используем комбинацию EXPLAIN EXTENDED, SHOW WARNINGS и визуальный анализ. 
          Вот пошаговый алгоритм, как понять, куда ставить индексы в 5.7: 
          1. Чтение расширенного плана (EXPLAIN EXTENDED) 
          Запустите ваш запрос с приставкой EXPLAIN EXTENDED, а сразу после него — команду просмотра предупреждений: 
          sql
          EXPLAIN EXTENDED SELECT ... (ваш запрос);
          SHOW WARNINGS;
          
          Используйте код с осторожностью.
          • Зачем: SHOW WARNINGS покажет вам «переписанный» оптимизатором запрос. Вы увидите, как на самом деле база интерпретирует ваши условия. Если там много лишних скобок или преобразований типов (например, число сравнивается со строкой), индекс может не работать. 
          2. Главные сигналы в таблице EXPLAIN 
          Смотрите на конкретные колонки в результате выполнения EXPLAIN: 
          • Тип ALL (самый опасный): Если в колонке type стоит ALL, это полное сканирование таблицы.
            • Что делать: Создайте индекс на колонку, которая указана в WHERE или в условии JOIN для этой таблицы.
          • Тип index_merge: База пытается использовать несколько индексов сразу, что не всегда эффективно.
            • Что делать: Лучше создать один составной индекс (на 2-3 колонки сразу).
          • Колонка rows: Показывает, сколько строк база примерно переберет.
            • Что делать: Если в таблице 100 000 строк, а в rows стоит 90 000 — индекс не работает или его нет.
          • Колонка key: Если там NULL, индекс не используется. 
          3. Анализ колонки Extra (текстовые подсказки) 
          Это "голос" оптимизатора. Ищите эти фразы: 
          • Using filesort: База делает сортировку в памяти или на диске.
            • Решение: Добавьте индекс на поле из ORDER BY.
          • Using temporary: Создается временная таблица (часто при GROUP BY или DISTINCT).
            • Решение: Индексируйте поля группировки.
          • Using join buffer (Block Nested Loop): Прямое указание на то, что для соединения таблиц (JOIN) не хватает индекса на второй таблице. 
          4. Автоматический поиск через sys схему (доступно в 5.7) 
          В MySQL 5.7 уже есть системная схема sys, которая помогает найти проблемные места без ручного перебора: 
          sql
          -- Найти запросы, которые чаще всего делают полное сканирование таблиц
          SELECT query, total_latency, no_index_used_count 
          FROM sys.statements_with_full_table_scans 
          WHERE db = 'ваша_база' 
          ORDER BY no_index_used_count DESC;
          
          Используйте код с осторожностью.
          Практический совет для вашего запроса: 
          В вашем первом EXPLAIN была фраза Using join buffer для таблицы im.
          В MySQL 5.7 это означает, что вам обязательно нужно добавить индекс:
          ALTER TABLE inbox_mail ADD INDEX (uid);
          Это сразу уберет самый тяжелый этап выполнения вашего запроса. 
          Создание общедоступной ссылки…
          Спасибо!
          Ваши отзывы помогают Google стать лучше. Ознакомьтесь с Политикой конфиденциальности.
          Оставить подробный отзывСообщить о проблемеЗакрыть
          • MySQL - Википедия
            Версия 5.7: в разработке (последний релиз — 5.7.32 от 19.10.2020). * MySQL 4.0. Несмотря на то, что версия 4.0 является устаревшей...
            Википедия
          • MySQL 8.4 Reference Manual :: 15.8.2 EXPLAIN Statement
            The query execution information is displayed using the TREE output format, in which nodes represent iterators. EXPLAIN ANALYZE alw...
            MySQL :: Developer Zone
          • Top 3 MySQL Query Profiling Tools - WeWork
            27 июн. 2023 г. — EXPLAIN — provides high level steps of how the query will execute. EXPLAIN ANALYZE — provides execution times and r...
            WeWork
          • MySQL :: Debunking GROUP BY Myths
            In case you did not yet notice, the film table now has Extra: Using index; Using temporary; Using filesort .
            Namibia University of Science and Technology (NUST)
          • MySQL EXPLAIN ANALYZE
            26 февр. 2022 г. — I wrote that "the filesort (line 1) started after [2043.416] milliseconds and ended after [2051.792] milliseconds,
            Hack MySQL
          • Практический опыт обновления MySQL 5.7 до версии 8.0
            20 нояб. 2019 г. — query_cache_limit, query_cache_min_res_unit, query_cache_size, query_cache_type, query_cache_wlock_invalidate. В п...
            Хабр
          • Создание темпоральной таблицы System-Versioned - SQL Server ...
            17 нояб. 2025 г. — Таблица истории всегда должна быть согласована по схеме с актуальной или временной таблицей с точки зрения количес...
            Microsoft Learn
          • High Performance MySQL [Ch.5: Indexing for High Performance]
            16 апр. 2021 г. — MySQL has two ways of sorting results, either by doing a sort operation (in memory or on disk) usually called a fil...
            Hashnode
          • MySQL - Википедия
            Версия 5.7: в разработке (последний релиз — 5.7.32 от 19.10.2020). * MySQL 4.0. Несмотря на то, что версия 4.0 является устаревшей...
            Википедия
          • MySQL 8.4 Reference Manual :: 15.8.2 EXPLAIN Statement
            The query execution information is displayed using the TREE output format, in which nodes represent iterators. EXPLAIN ANALYZE alw...
            MySQL :: Developer Zone
          • Top 3 MySQL Query Profiling Tools - WeWork
            27 июн. 2023 г. — EXPLAIN — provides high level steps of how the query will execute. EXPLAIN ANALYZE — provides execution times and r...
            WeWork
          Показать все
          Закрыть
          Другие способы ввода
          Микрофон
          Загрузить изображение
          Отправить

          Turn on your Visual Search History?

          Google uses its visual recognition technologies to process the images you use to search, like when you search with Google Lens. If you turn on your Visual Search History, Google will save these images from eligible Google services to your Web & App Activity when you’re signed in to your Google Account. You can learn more about this setting and which Google services save images to it at g.co/Search/VisualSearchHistory.

          How visual search history is used

          Your Visual Search History may be used to improve your experience on Google services, like letting you revisit your past visual searches. It may be used to develop and improve Google’s visual recognition and search technologies, as well as the Google services that use them.

          When visual search history is off

          If you turn this setting off, any previous Visual Search History may still be kept and used to improve Google’s visual recognition and search technologies, unless you delete it from your Web & App Activity.

          Visual Search History doesn’t affect images saved by other settings, like Gemini Apps Activity.

          How to manage your Visual Search History

          You can view, delete, or manage your Visual Search History at activity.google.com. To download your Visual Search History, visit takeout.google.com. Images will be deleted in accordance with your Web & App Activity auto-delete settings, although some types of images may be deleted sooner.

          Google uses and saves data in accordance with Google Privacy Policy.

          No thanks
          Turn on
          Центр управления рекламой

          Результаты поиска

          Приложения Google
          Аккаунт Google
          Артём Казанов
          tracelinemsk@gmail.com
          Ответ от режима ИИ готов.