關於臨時表的疑問

2021-03-31 22:50:11 字數 551 閱讀 9858

疑問: 什麼情況下 sqlserver 會隱式(即在語句中沒有#,##,但實際上使用了臨時表) 使用 臨時表,

這個隱式的臨時表的作用域會持續到什麼時候(乙個語句內?乙個儲存過程內?乙個連線內?一段時間?)

網上有篇文章說

---- where條件中的'in'在邏輯上相當於'or',所以語法分析器會將in ('0','1')轉化

為id_no ='0' or id_no='1'來執行。我們期望它會根據每個or子句分別查詢,再將結果

相加,這樣可以利用id_no上的索引;但實際上(根據showplan),它卻採用了"or策略"

,即先取出滿足每個or子句的行,存入臨時資料庫的工作表中,再建立唯一索引以去掉

重複行,最後從這個臨時表中計算結果。因此,實際過程沒有利用id_no上索引,並且完

成時間還要受tempdb資料庫效能的影響。

-----

這裡說 使用 or 條件就可能用到臨時表,但是我自己在查詢分析器中執行 查詢執行計畫 ,卻看不到

任何使用臨時表的跡象,是否因為 查詢的資料量太小

請大家踴躍討論一下,

關於 retainCount 的疑問

我在 main.m 裡寫了三個測試例子,就是不明白為什麼輸出的都是 1 別人幫忙測試了下,輸出的是額外的超大的值 nsstring str1 welcome nslog d str1 retaincount nsstring str2 nsstring stringwithstring you ns...

關於scanf的疑問

scanf函式是從標準輸入流 stdin 讀取資料,按照格式說明引數,將資料寫入引數位址所在空間,標準輸入流預設的是鍵盤輸入流,但是,由於作業系統的緩衝區管理機制,從鍵盤上輸入的資料不是直接被scanf函式讀取的,而是暫存在記憶體緩衝區,只有遇到回車鍵的時候,scanf函式才會開始工作,並且,最後輸...

關於sort 的疑問?

對於不同型別的資料從小到大排序可以直接用sort 函式排,但是如果是從大到小排序,就得寫乙個比較函式了,怎麼辦呢?我的第一想法就是利用函式模板寫乙個cmp 函式,如下 所示,但是這串 是通不過編譯的,include include using namespace std template bool ...