我有三個表,其數據我需要基於共同的領域加入。模擬完全加入MYSQL與大型數據集
樣本僞表DEFS:
barometer_log(設備,壓力浮動,sampleTime時間戳)
temperature_log(裝置INT,溫度浮動,sampleTime時間戳)
magnitude_log(設備int,幅度浮點數,utcTime時間戳)
這些表格最終將包含數十億行,但目前每行包含大約500,000行。
我需要能夠將數據從表結合(FULL JOIN)以使得sampleTime被合併爲一個柱(COALESE)給我的行爲: 設備,sampleTime,壓力,溫度,量級
我需要能夠通過指定設備和開始和結束日期來查詢數據,例如 選擇....其中device = 1000和sampleTime '2011-10-11' 和 '2011-10-17' 之間
我嘗試不同UNION ALL技術與右和左連接 如MySql full join (union) and ordering on multiple date columns建議和MySql full join (union) and ordering on multiple date columns,但查詢需要很長時間,我必須停止它或運行幾個小時後引發有關臨時文件大小的錯誤。 什麼是我最好的方式來查詢三個表,並在可接受的時間範圍內合併他們的輸出?
下面是建議的全表定義。 注意:尚未包含設備表。
magnitude_log
CREATE TABLE magnitude_log (
device int(11) NOT NULL,
magnitude float not NULL,
sampleTime timestamp NOT NULL,
PRIMARY KEY (device,sampleTime),
CONSTRAINT magnitudeLog_device
FOREIGN KEY (device)
REFERENCES device (id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
barometer_log
CREATE TABLE barometer_log (
device int(11) NOT NULL,
pressure float not NULL,
sampleTime timestamp NOT NULL,
PRIMARY KEY (device,sampleTime),
CONSTRAINT barometerLog_device
FOREIGN KEY (device)
REFERENCES device (id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
temperature_log
CREATE TABLE temperature_log (
device int(11) NOT NULL,
sampleTime timestamp NOT NULL,
temperature float default NULL,
PRIMARY KEY (device,sampleTime),
CONSTRAINT temperatureLog_device
FOREIGN KEY (device)
REFERENCES device (id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
你有'設備'列(我猜你用於連接)索引? –
我在所有三個表格上都有設備和sampleTime的複合索引 – anzaan
請添加表格定義。 'device'是主鍵還是唯一鍵?或者'(device,sampleTime)'每個表中的PK? –