Решение проблем с большой задержкой с помощью SQL Left Join - PullRequest
0 голосов
/ 03 апреля 2020

Мой компьютер в настоящее время работает к 48 часу левого оператора соединения. Это заявление о левом соединении состоит в объединении двух матриц, одна из которых имеет размер 47 млн. Х 3, другая - 45 млн. Х 2. Компьютер, на котором я работаю, - это i7 9-го поколения с 32 ГБ памяти и еще один 32-ГБ подкачка.

Первая таблица: clsecsoneclean

CREATE TABLE `clsecsoneclean` (   
    `bartime` datetime DEFAULT NULL,   
    `volume` smallint(5) unsigned DEFAULT NULL,  
    `cloneprice` float DEFAULT NULL 
) ENGINE=InnoDB DEFAULT
CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Вторая таблица clsecstwoclean

CREATE TABLE `clsecstwoclean` (   
    `bartime` datetime DEFAULT NULL,   
    `cltwoprice` float DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

А таблица вывода

stepone

CREATE TABLE `stepone` (   
    `bartime` datetime DEFAULT NULL,   
    `volume` smallint(5) unsigned DEFAULT NULL,   
    `cloneprice` float DEFAULT NULL,   
    `cltwoprice` float DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

с SQL оператором объединения:

INSERT INTO stepone 
    SELECT clsecsoneclean.bartime, clsecsoneclean.volume, 
            clsecsoneclean.cloneprice, clsecstwoclean.cltwoprice 
    FROM clsecsoneeclean 
        LEFT JOIN clsecstwoclean ON clsecsoneclean.bartime=clsecstwoclean.bartime 
    ORDER BY clsecsoneclean.bartime;

Произошла ли ошибка в моем операторе соединения?

Является ли это неподходящим местом для использования левого соединения, поскольку есть лучший способ выполнить sh, например, написать программу для себя на C для выполнения sh этой конкатенации. Моя конечная цель не в том, чтобы я запустил программу и мгновенно получил результат, но программа, работающая быстрее, была бы моей большой целью, потому что это не единственные матрицы, которые мне нужно объединить.

...