关于pdf框架(PWMIS Data Develop Framework)关于分页支持的看法

本文探讨了在使用MySQL、PostgreSQL数据库时,如何通过优化分页查询来提升性能,包括使用OFFSET方式避免重复计算及针对不同数据库特性的注意事项。

首先我们先看查询细节,以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语句。效率.......



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值