我有一个复杂的SP,它应用了多个JOIN和查找,并且复杂的过滤器就像逗号分隔值等......最重要的是,我要部署两个复杂但性能有效的功能:
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和Linux中可用的东西。 PostgreSQL:
[LIMIT { number | ALL }] [OFFSET number]
Database: SQL Pagination? http://www.sql.org/sql-database/postgresql/manual/queries-limit.html
奇怪的是这么简单& SQL 2005+中没有基本功能..或者我错了(我很高兴听到它: - ))
我已经知道两种方法可以解决我的性能\复杂性权衡 -
[2.1]使用SQL 2005的“RowNumber()”功能然后应用过滤器:(我以前用过它)
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?
答案 0 :(得分:0)
我相信这两种方法都很好,我们可以选择最适合我们要求的方法
我已经知道两种方法可以解决我的性能\复杂性权衡 -
[2.1]使用SQL 2005的“RowNumber()”功能然后应用过滤器:(我以前用过它)
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?