Access分页及效率分析(MSSQL Server、Oracle分页)
在实际过运用过程中,我们开发的项目有时需要支持多种数据库,那么在开发中我们会遇到不同的数据库在SQL语句方面还有区别,导致我们有些细节需要去调整,下面就分页功能在不同的数据库中的具体使用详细说明。 一、Access数据库分页与效率分析 由于Access操作
在实际过运用过程中,我们开发的项目有时需要支持多种数据库,那么在开发中我们会遇到不同的数据库在SQL语句方面还有区别,导致我们有些细节需要去调整,下面就分页功能在不同的数据库中的具体使用详细说明。
一、Access数据库分页与效率分析
由于Access操作简单,调用,迁移方便,节省费用,对于搭建者的能力要求也会低些,对于较小量的数据,我们使用Access数据库是比较适合的,但是随着数据量增加,达到几十万、几百万甚至更多的时候,那么数据库的效率就会出现问题了,这个时候比如像分页功能可能就出现问题了,下面我们就看看常见的Access分页有哪些方式?
方案一:使用ADO.NET本身的结果集,使用PageSize,AbsolutePage的属性来进行分页
当然我一般不推荐使用拖控件进行快速开发,拖控件会导致产生大量的垃圾代码,是网站效率低下,当然在后台可以使用部分控件,今天就不说.NET拖控件效率低下的问题了,使用ADO.NE的结果集方式,每次都要读入符合条件的所有记录,然后再定位于对应页的记录。当数据量大的时候,效率就十分的低下。
方案二:使用not in 方式
select top 3 * from Article where Id not in(select top 6 Id from Article)
使用not in 方式,其中的top效率很高,但是not in 呢? 测试发现,当数据量比较小时还是挺快的,但是当到达10万条数据是,单击查询就慢了,如果使用该分页方式,当数据量很大时,估计天天有人在骂:这是哪个SB开发的系统啊,这么垃圾!
方案三:使用select top pageSize * from (select top pageindex*pageSize * from ywgl_news order by id desc) order by id
在实际过程中发现,当数据量比较大是,使用这种方式分页,Access的效率还可以,比not in 方式效率高多了,但是此处也需要注意的是:很多人喜欢使用select * from 表名, 实际中发现这不是一个好习惯,我们应该需要什么字段查询什么字段,这样能够极大的节省服务器资源。
二、MSSQL Server和Oracle数据库的分页
当然MSSQL Server和Oracle数据库的分页可以选择的方式更多,除了使用ADO.NET数据集、Not in 方式、Select top方式外,还有row_number方式等更好的分页实现方式,
select * from
(select * ,row_number() over(order by Id) rownumber from T_Users) as t
where t.rownumber>4 and t.rownumber
需要注意的是:在MSSQL Server和Oracle中使用row_number还有些细节不同,下面就是Oracle和MS SqlServer中的具体分页方式:
int start = (pageindex - 1) * pageSize;
int end = pageindex * pageSize;
Oracle的分页T-SQL语句:
string sql = "select * from(select a.*,rownum row_num from(select * from ywgl_news t {0} order by t.Id desc) a)b where b.row_num>" + start.ToString() + " and b.row_num
MSSQL Server的分页T-SQL语句:
string sql = "select * from(select * ,row_number() over(order by Id) rownumber from ywgl_news {0}) as t where t.rownumber>"+start.ToString()+" and t.rownumber
三、附录存储过程的写法(MSSQL SERVER为例)
--创建存储过程row_number方式
alter proc GetPageForRownumber
(
@pageIndex int,--当前页
@pageSize int,--页容量
@rowCount int out,--总行数
@pageCount int out --总页数
)
as
begin
declare @sql nvarchar(225)
select @rowCount=count(Id),@pageCount=ceiling((count(Id)+0.0)/@pageSize) from T_Users
set @sql='select * from
(select * ,row_number() over(order by Id) rownumber from T_Users) as t
where t.rownumber>'+str((@pageIndex-1)*@pageSize)+' and t.rownumber
exec(@sql)
end
---测试row_number 方式的存储过程
declare @rc int,@pc int
exec GetPageForRownumber 3,2,@rc out,@pc out
select @rc,@pc
四、开发中遇到的小问题
1、报错"标准表达式中数据类型不匹配。"
Access在进行参数化查询的时候老是报错,这让哥很纳闷啊,看着SQL语句也是对的,参数的值也是对的,为什么老是提示报错呢?如下图代码就会报该错误。
string sql = "UPDATE ywgl_News set
New_Title=@New_Title,
New_Source=@New_Source ,New_ReadCount=@New_ReadCount,New_Content=@New_Content,New_Summary=@New_Summary,New_Author=@New_Author,New_ClassId=@New_ClassId
where Id=@Id";
OleDbParameter[] para = new OleDbParameter[]
{
new OleDbParameter("@Id",model.New_id),
new OleDbParameter("@New_Title",ToDBValue(model.New_title)),
new OleDbParameter("@New_Source",ToDBValue(model.New_source)),
new OleDbParameter("@New_ReadCount",ToDBValue(model.New_readcount)),
new OleDbParameter("@New_Content",ToDBValue(model.New_content)),
new OleDbParameter("@New_Summary",ToDBValue(model.New_summary)),
new OleDbParameter("@New_Author", ToDBValue(model.New_author)),
new OleDbParameter("@New_ClassId",ToDBValue(model.New_class.Id))
};
num = AccessHelper.ExecuteNonQuery(sql, para);
经过查找原因,原来问题出在”@“符号上了,我们可以用”?“占位符替换,这个MSSQL Server有点小不同,如果使用了”@“那么就要确保各个参数的顺序一致。否则就报该错误。
2、在删除操作时删除不了
各个数据库具体T-SQL语句还有些不同,在Oracle中中 string sql = "Delete ywgl_news where Id=:Id";可以删除,没问题,但是在Access中这样写就不行了应该这样写:
string sql = "Delete from ywgl_news where
Id=@Id";
五、总结三种不同数据库的分页方式及效率
那么我们在实际应用中,到底该选择哪种类型的数据库呢?使用Access,还是MSSQL Server,还是Oracle?不要觉得Oracle就觉得你的系统很牛B,这个需要根据系统的定位和使用者来进行确定,如果说是一个很小的政府门户网站,数据量也很小,那么用一个Access完全够了,而且数据量很小的时候,Access的速度还更快,当然如果说是做GIS的国土数据整合系统,那像这样的海量的数据,那就肯定需要用像Oracle大型数据库了。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SQL IF 語句用於有條件地執行 SQL 語句,語法為: IF (condition) THEN {語句} ELSE {語句} END IF;。條件可以是任何有效的 SQL 表達式,如果條件為真,執行 THEN 子句;如果條件為假,執行 ELSE 子句。 IF 語句可以嵌套,允許更複雜的條件檢查。

如何在 Apache 中配置 Zend?在 Apache Web 服務器中配置 Zend Framework 的步驟如下:安裝 Zend Framework 並解壓到 Web 服務器目錄中。創建 .htaccess 文件。創建 Zend 應用程序目錄並添加 index.php 文件。配置 Zend 應用程序(application.ini)。重新啟動 Apache Web 服務器。

無法以 root 身份登錄 MySQL 的原因主要在於權限問題、配置文件錯誤、密碼不符、socket 文件問題或防火牆攔截。解決方法包括:檢查配置文件中 bind-address 參數是否正確配置。查看 root 用戶權限是否被修改或刪除,並進行重置。驗證密碼是否準確無誤,包括大小寫和特殊字符。檢查 socket 文件權限設置和路徑。檢查防火牆是否阻止了 MySQL 服務器的連接。

本文介紹如何在Debian系統上有效監控Nginx服務器的SSL性能。我們將使用NginxExporter將Nginx狀態數據導出到Prometheus,再通過Grafana進行可視化展示。第一步:配置Nginx首先,我們需要在Nginx配置文件中啟用stub_status模塊來獲取Nginx的狀態信息。在你的Nginx配置文件(通常位於/etc/nginx/nginx.conf或其包含文件中)中添加以下代碼段:location/nginx_status{stub_status

PHPMyAdmin安全防禦策略的關鍵在於:1. 使用最新版PHPMyAdmin及定期更新PHP和MySQL;2. 嚴格控制訪問權限,使用.htaccess或Web服務器訪問控制;3. 啟用強密碼和雙因素認證;4. 定期備份數據庫;5. 仔細檢查配置文件,避免暴露敏感信息;6. 使用Web應用防火牆(WAF);7. 進行安全審計。 這些措施能夠有效降低PHPMyAdmin因配置不當、版本過舊或環境安全隱患導致的安全風險,保障數據庫安全。

vProcesserazrabotkiveb被固定,мнелостольностьстьс粹餾標д都LeavallySumballanceFriablanceFaumDoptoMatification,Čtookazalovnetakprosto,kakaožidal.posenesko

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

有效監控和防禦惡意網站訪問對於Debian系統的Apache服務器至關重要。 Apache訪問日誌是識別此類威脅的關鍵信息來源。本文將指導您如何分析日誌並採取防禦措施。識別惡意訪問行為Debian系統的Apache訪問日誌通常位於/var/log/apache2/access.log。您可以通過多種方法分析日誌:日誌文件位置確認:首先,請確認您的Apache訪問日誌的準確位置,它可能因係統配置而略有不同。命令行工具分析:使用grep命令搜索特定模式,例如grep"404"
