首先我们先看查询细节,以MySql为例
-----------------------------------------------------------------------------------------
使用Offset方式
-----------------------------------------------------------------------------------------
说明 offset是从0开始索引
private static string MakePageSQLStringByMySQL_PgSQL(stringstrSQLInfo,string
strWhere, intPageSize,
int PageNumber, int AllCount,
string offsetString)
{
strSQLInfo = strSQLInfo.Trim();
//去除末尾的分号
if (strSQLInfo.EndsWith(";"))
strSQLInfo = strSQLInfo.TrimEnd(';');
if (strWhere != null && strWhere != "")
{
strWhere = strWhere.Trim().ToUpper();
if (strWhere.StartsWith("WHERE "))
throw new Exception("附加查询条件不能带 where 谓词");
if (strWhere.IndexOf(" ORDER BY ") > 0)
throw new Exception("附加查询条件不能带 ORDER BY 谓词");
strSQLInfo = "SELECT * FROM (" + strSQLInfo + ") temptable0 WHERE " + strWhere;
}
if (AllCount == 0)
{
//生成统计语句
return "select count(*) from (" + strSQLInfo + ") ";
}
if (PageNumber == 1)
return strSQLInfo + " LIMIT " + PageSize;
int offset = PageSize * PageNumber;// 应该是 PageSize * (PageNumber -1)
if (offsetString == ",")//MySQL,感谢网友[左眼]发现此Bug
return strSQLInfo + " LIMIT " + offset + offsetString + PageSize;
else //PostgreSQL
return
strSQLInfo + " LIMIT " + PageSize + offsetString + offset;
}
-------------------------------------------------------------------------------
修改后的代码为:
1.用pdf框架开发Mysql Sqlite PostgreSQL数据库的朋友在进行分页时要小心了,小心。
2.用+号来进行字符串拼接,本人还是觉得StringBuilder要好,因为传入的strSQLInfo可能大量sql语句。效率.......
本文探讨了在使用MySQL、PostgreSQL数据库时,如何通过优化分页查询来提升性能,包括使用OFFSET方式避免重复计算及针对不同数据库特性的注意事项。
3996

被折叠的 条评论
为什么被折叠?



