MySQL индексы объединения таблиц, работающие только при определенных условиях - PullRequest
0 голосов
/ 31 января 2020

есть странный здесь. У меня есть многостольный запрос на соединение с правильными индексами, назначенными для условий соединения Запрос выполняется с индексами, когда одна из таблиц установлена ​​в качестве основного соединения (.7se c complete), но не при установке другой таблицы (189se c complete). Я надеюсь, что кто-то может помочь мне понять, почему индекс будет работать во втором сценарии, а не в первом. Я включил ниже условия объединения вместе с EXPLAIN для каждого запроса:

Индексы объединения не работают:

        FROM
        ((
                `fuse`
                LEFT JOIN `occupancy` ON (((
                        CONVERT(substring_index(
                            `occupancy`.`last_name`,
                            '_',-(
                                1 
                            )),UNSIGNED INTEGER) = `fuse`.`agent_id` 
                    ) 
AND ( `fuse`.`login_date` = `occupancy`.`login_date` )))
                LEFT JOIN `reporting_match` ON ((
                        `fuse`.`agent_id` = `reporting_match`.`agent_id` 
                    )))
            )

enter image description here Работают индексы соединения:

    FROM
        ((
                `occupancy`
                LEFT JOIN `fuse` ON (((
                        CONVERT(substring_index(
                            `occupancy`.`last_name`,
                            '_',-(
                                1 
                            )),UNSIGNED INTEGER) = `fuse`.`agent_id` 
                    ) 
AND ( `fuse`.`login_date` = `occupancy`.`login_date` )))
                LEFT JOIN `reporting_match` ON (
                        substring_index(
                            `occupancy`.`last_name`,
                            '_',-(
                                1 
                            )) = `reporting_match`.`agent_id` 
                    ))
            )

enter image description here

1 Ответ

1 голос
/ 31 января 2020

Спасибо всем, немного устал, когда я опубликовал это. Я решил удалить условие соединения substring_index вместе с добавлением идентификатора, который подстрока собирала в таблицу занятости при импорте данных. Затем я использовал этот идентификатор в качестве нового условия соединения с таблицей предохранителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...