我有一個複雜的SP,其適用於多種連接和查找,來像逗號分隔值等複雜的過濾器......在它的上面,我已經部署兩個複雜但性能高的特點:合併:使用SET ROWCOUNT或RowNumber()的SQL 2005+動態分頁?
1.動態排序,但我看到它的有限的 - 你硝酸鉀長/笨拙CASE結構,它的奇怪的是,專家們還一致認爲,這是唯一的「最好」的解決方案,我們已經有了:
Dynamic Sorting within SQL Stored Procedures http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=5942
無論如何,我現在不期待這一點。
2.動態分頁 - 即我希望SP能夠從Y(Y =頁碼)開始僅返回X個記錄(X =頁面大小)。我希望你有大概的想法。
爲了使它更清楚,我想利用現有的東西在MySQL & PostgreSQL的:
[LIMIT { number | ALL }] [OFFSET number]
Database: SQL Pagination? http://www.sql.org/sql-database/postgresql/manual/queries-limit.html
它的奇怪這樣一個簡單的&基本功能不可用在SQL 2005+ ..或者我錯了(我很高興聽到它:-))
我知道這套房我的表現\複雜的權衡兩種方法 -
[2.1]使用「ROWNUMBER()」 2005的SQL的功能,然後將過濾器:(我在過去使用它)
WHERE (Row BETWEEN (@PageIndex-1) * @PageSize +1 AND @PageIndex* @PageSize)
但是,這又需要創建臨時表或使用WITH子句。這也解釋在: Row Offset in SQL Server
[2.2]我找到了一些新的方法。其中之一是使用
SET ROWCOUNT
http://www.4guysfromrolla.com/webtech/042606-1.shtml
他們說,總體2.2是有效的,然後2.1。是嗎?另外,我想知道如果兩個用戶請求同時觸發兩次相同的SP,會發生什麼情況。我希望'SET ROWCOUNT'不會在同時SP呼叫中'共享'或'覆蓋'。請確認。 其他比較點2.1 & 2.2?
如果你仍然在附近,你的文章的後半部分應該是作爲回答發佈的,而不是問題的主體 – 2012-06-19 16:37:18
謝謝,但我真的很想找一些關於此問題的專家意見。這就是我發佈我的綜合研發的原因。 – 2012-06-21 07:46:31