在T-SQL中循環查詢的最快方法是什麼? 1)遊標或 2)添加密鑰的臨時表或 其他任何東西。通過SQL查詢循環的最快方法
0
A
回答
0
我不認爲你需要一個遊標(你對concat的評論),如果我明白你要去的是什麼。 這是我的一個抓取聯繫人的所有電話號碼,並將它們放在一個字段中並將其返回。
DECLARE @numbers VARCHAR(255)
SELECT @numbers = COALESCE(@numbers + ' | ','') + PHONE_NUMB FROM my_table (NOLOCK)
WHERE [email protected]_id RETURN @numbers
1
0
遊標通常是資源霸王,特別是隨着您的表大小的增長。所以如果你的表格尺寸很小,我會推薦一個遊標,但是,更大的表格可能會更好用外部或臨時表格。
5
通過查詢「循環」的最快方法是不做。在SQL中,你應該考慮基於集合而不是基於循環的。你應該評估你的查詢,詢問爲什麼你需要循環,並尋找方法來做到這一點。
即便如此,在光標上使用FAST_FORWARD選項將有助於加快速度。
0
你想通過存儲過程或從C#代碼循環查詢輸出嗎?
一般來說,您應該避免一次循環查詢輸出一行。 SQL意味着基於集合的操作,因此請參閱您是否可以使用基於集合的方法解決您的問題。
0
取決於結果集的大小 - 表變量在內存中,不需要讀取磁盤,可以像處理表一樣處理(設置操作),並且速度非常快,直到結果集變大爲內存(然後需要交換文件寫入)。
3
對於你所說的目標,這樣的事實上是一個更好的選擇 - 完全避免了「循環」問題。
declare @table table
(
ID int
)
insert into @table select 1 union select 2 union select 3 union select 4 union select 5
declare @concat varchar(256)
-- Add comma if it is not the first item in the list
select @concat = isnull(@concat + ', ', '') + ltrim(rtrim(str(ID))) from @table order by ID desc
-- or do whatever you want with the concatenated value now...
print @concat
0
這裏有一個快捷方式,從返回的行數的查詢得到一個逗號分隔的單場串。與遊標等替代品相比,相當快,它可以是子查詢的一部分(即獲得一些東西,並在一列中列出與其他表中的每個東西相關的所有事物的ID):
SELECT
COALESCE(
REPLACE(
REPLACE(
REPLACE(
(SELECT MyField AS 'c' FROM [mytable] FOR XML PATH('')),'</c><c>',','),
'<c>',''),
'</c>',''),
'')
AS MyFieldCSV
警告:如果您的列包含FOR XML PATH將逃脫的字符,它將無法正常播放。
0
光標不好避免光標,使用while循環來代替光標 臨時表中添加了關鍵是使用循環的最佳方式。
我必須操縱表中的1000000多行,因爲複雜的邏輯,光標需要2分鐘的 。 但是,當將光標轉換爲while循環時,僅需要25秒25秒。所以這在性能上有很大的不同。
相關問題
- 1. 通過SQL表循環並執行多個查詢的最快方法
- 2. SQL查詢循環通過
- 3. 退出TParallel.For循環的最快方法?
- 4. 如何通過SQL循環查找最近的最大日期?
- 5. 循環通過getElementsByClassName方法
- 6. 速度快:查詢語法與循環
- 7. 通過SQL數據庫列對Excel列循環最快的方式 - C#
- 8. 加快查詢內循環?
- 9. 循環中的SQL查詢循環中
- 10. 通過圖像循環的更快方法
- 11. 帶循環的SQL查詢
- 12. C#查詢excel最快的方法
- 13. 通過註釋查詢循環
- 14. 忽略foreach循環通過MySQL查詢
- 15. 加載循環查詢的好方法
- 16. 通過循環變量對循環或SQL查詢進行排序變量
- 17. 循環通過entityreference的正確方法?
- 18. 哪個是運行此SQL查詢最快的方法?
- 19. SQL LINQ查詢不斷循環通過兩個表
- 20. 循環在SQL查詢中
- 21. 雖然循環sql查詢
- 22. PL SQL查詢recuresive循環
- 23. 循環在SQL查詢
- 24. LINQ to SQL:循環查詢
- 25. 通過最近的浮點值查詢最有效的方法?
- 26. SQL查詢通過
- 27. SQL查詢通過
- 28. 在各種情況下循環遍歷循環的最快方法
- 29. 通過一個快速無限循環
- 30. 更快的循環方法('for'和'foreach')?
你想完成什麼? – 2009-07-01 19:58:10
我從查詢中獲取一些數據,並希望循環通過第一個到最後一個項目,並在結果集中執行字段的字符串連接。 – Greens 2009-07-01 20:03:27
基本經驗法則:儘可能避免遊標 - 它們已經死了 - 緩慢,笨拙,並且不適合T-SQL。使用基於集合的方法 - 將其加載到臨時表中並在其上運行UPDATE語句。 – 2009-07-01 20:40:57