關於利用TOP 臨時表進行分頁一點收穫

2022-02-01 11:50:52 字數 875 閱讀 7577

今天發現系統中list頁面中分頁有問題,有些記錄顯示不出來,list頁面用的是top+臨時表sql,錯誤在於:

當點選int型別的字段排序,有些記錄在所有的頁面都找不到,百思不得其解,

把sql語句摳出來執行發現:對於top+數量的用了order by語句取出來的記錄的順序不一樣,發現

順序不一樣的行是值相同的那幾行,比如:

select top 10 * from table1 order [count]  asc

結果如下:

idcount

131 1

2 2

2 56

4 6

5 8

6 9

8 7

745 7

select top 11 * from table1 order [count]  asc

idcount

131 1

2 2

2 56

4 6

5 8

6 9

6 45

77 7

4567

發現紅色的兩條記錄位置已經變化,呵呵,用在分頁技術上,如果pagesize為9的話,那麼有一行肯定是顯示不了了。

後來將count列的資料型別設定為char,ok,每次取都是同樣的順序。不管top多少。。。。

想了半天,唯一的理由可能是sql server中執行計畫在不同的top數量的時候有不同的策略吧。。

解決辦法:

在order by多加乙個排序字段,只要不是int就行

使用臨時表進行效能優化

這兩個月都在搞一儲存過程,快要被它搞出精神病了。主要是它執行的時間比較長,每次執行幾十分鐘是常有的事,幾個小時也不少見。甚至乎這幾天,執行了兩天一夜都還不知道何時會圓滿結束。等待本來就是乙個痛苦的過程,而這個過程要幾天幾夜,那我不瘋誰人瘋。這肯定是有問題的。執行時間超過1小時的都應該有問題。後來,改...

關於臨時表的疑問

疑問 什麼情況下 sqlserver 會隱式 即在語句中沒有 但實際上使用了臨時表 使用 臨時表,這個隱式的臨時表的作用域會持續到什麼時候 乙個語句內?乙個儲存過程內?乙個連線內?一段時間?網上有篇文章說 where條件中的 in 在邏輯上相當於 or 所以語法分析器會將in 0 1 轉化 為id ...

利用臨時表對查詢資料重新排序

先看乙個查詢 select top 3 id title from table1 where id 5 order by id asc 表中有id 1,2,3,4,5的幾行資料,本來想按順序得到id 4,3,2的資料行,但該查詢實際得到的是id 2,3,4順序的資料行。當然,可在程式中對資料集重新排...