我有一個表的MySQL查詢時間太長
CREATE TABLE temp (
i1 DECIMAL(10, 5),
i2 DECIMAL(10, 5),
i3 DECIMAL(10, 5),
i4 DECIMAL(10, 5),
i5 DECIMAL(10, 5),
i6 DECIMAL(10, 5),
i7 DECIMAL(10, 5),
i8 DECIMAL(10, 5),
i9 DECIMAL(10, 5),
o1 DECIMAL(10, 5),
o2 DECIMAL(10, 5),
o3 DECIMAL(10, 5),
o4 DECIMAL(10, 5),
o5 DECIMAL(10, 5),
o6 DECIMAL(10, 5),
o7 DECIMAL(10, 5),
o8 DECIMAL(10, 5),
o9 DECIMAL(10, 5)
);
CREATE INDEX input_data_index
ON temp (i1, i2, i3, i4, i5, i6, i7, i8, i9);
CREATE INDEX test_index
ON temp (o1);
我試圖通過使用此查詢該表來搜索:
SELECT * FROM temp t
INNER JOIN temp x
ON t.i1 = x.i1
AND t.i2 = x.i2
AND t.i3 = x.i3
AND t.i4 = x.i4
AND t.i5 = x.i5
AND t.i6 = x.i6
AND t.i7 = x.i7
AND t.i8 = x.i8
AND t.i9 = x.i9
WHERE t.o1 != x.o1;
表包含180362行。如果我拿出where子句,只需要0.157秒的時間運行,然而使用where子句需要很長時間才能運行(超過300秒),此時我只是取消它。
爲什麼在添加where子句時需要很長時間才能運行? 你對我如何加快速度有什麼建議嗎?
編輯:
當我運行使用原始索引我有我得到的解釋聲明:img
當我使用@Simulant的一個建議運行EXPLAIN語句(添加01到索引)我得到:img2
但這個查詢仍然需要很長時間才能執行。
它可能會在連接上單獨運行每行的where查詢,即它正在執行數千個查詢。 – MadHatter
這種問題是令人震驚的糟糕設計的症狀 – Strawberry
嘗試刪除'o1'上的索引。這可能會讓優化器感到困惑。 –