該語句運行很長時間並且不返回任何內容。我究竟做錯了什麼?SQL語句無限運行
SELECT *
FROM supplierdata AS s1
WHERE s1.zip IN (
SELECT zip
FROM supplierdata AS s2
WHERE s1.zip = s2.zip
);
該語句運行很長時間並且不返回任何內容。我究竟做錯了什麼?SQL語句無限運行
SELECT *
FROM supplierdata AS s1
WHERE s1.zip IN (
SELECT zip
FROM supplierdata AS s2
WHERE s1.zip = s2.zip
);
由於效率低下,您的聲明運行很長很長一段時間。
首先,查詢並沒有真正意義。以下是等價的:
select *
from supplierdata
where zip is not null
我建議你殺了查詢和supplierdata(zip)
建立索引。這應該會大大提高查詢的性能。
實際上,您的查詢正在爲supplierdata
的每一行運行子查詢。這非常昂貴,需要對錶格進行全表掃描。索引應該解決這個問題。
你正在做一個非常貧窮的男人的,所以你的查詢將基本上是:
更簡單的方法來達到同樣的。 選擇 計數(1) 從 supplierdata S1 其中 拉鍊不爲空
我只想比較1條記錄和其他所有條目,反之亦然。 – 2013-03-26 13:41:11
除了 「這個不要讓任何意義」:
select *
from supplierdata as s1
where s1.zip IN
(select zip from supplierdata as s2 where s2.zip between 200 and 300);
其相當於
select *
from supplierdata as s1
where s1.zip
between 200 and 300;
依此類推....只是沒有任何意義......如果你解釋你試圖完成什麼,它應該會更好;)
或者沒有引用父查詢的任何條件;你循環不是無限的,它只是很長,因爲它首先逐行進行,就像@Nix所說
你的回答是對的,但我不想使用'之間'。 – 2013-03-26 13:40:30
你想完成什麼...我可以幫你;) – Hackerman 2013-03-26 13:44:51
這條SQL語句沒有任何意義。你想達到什麼目的? – 2013-03-26 13:26:00
我只想知道sql語句是如何進入無限循環以及處理多長時間的。 – 2013-03-26 13:35:30
嗨@NimeshSoni,遲早這個問題將被關閉。爲了提出更好的問題,你也可以解釋你想要達到的目標。這個SQL沒有任何意義。 – Ramesh 2013-03-26 15:48:50