Access分頁查詢的效能短板

2021-05-23 21:03:16 字數 895 閱讀 7008

最近專案頻繁用到了access資料庫。主要還是因為一些規模比較小點的公司沒有專業的技術員,非專業人員都對access比較上手。所以就選了這個資料庫。偏偏資料處理量比較多。就讓我撞上了access這個效能問題。

[強烈建議在access進行分頁查詢top n的時候,盡量避開not in]

通常使用top n進行分頁查詢的時候,比如說每頁十行,要查第五頁,即(41-50)條記錄。比較慣用的方法是:

select top 10 from [table name ] where id not in  (select  top (5-1)*10 from  table) and ....

這樣就很方便地把資料取出來了。看起來容易,但在資料量很多的時候,not in這個運算是極其耗費資源的。其思想是:先將

not in(...)括號裡面的集合算出來,然後對錶的每一條記錄的id進行判斷,判斷是否是括號中的第乙個,第二個,第三個。。。。,如此一來,時間就都消耗在上面了。

最悲劇的我,幾千條資料以內的查詢還好,但由於是多條件查詢,比如要查日期是今天的資料中的第n頁,所以就多嵌了幾個子查詢,再配合上not in,access就直接無響應了。直接在access sql view裡面查詢也一樣。

最後只好想辦法把not in去掉。一般公認比較好的方法是用left join,

上面的語句就可以改為

select top 10 * from  article

where id>(select max(id )from (select top (5-1*10) id from article order by id asc))

order by id asc

主要是進行排序。但如果排序欄位有重複,就很麻煩了。目前正在研究更全面一點的方法。

但千萬建議:不要用not in

Access分頁查詢

由於access資料庫內沒有儲存過程一說.那麼實現它的分頁上效率問題一直都是麻煩事.下面一段 相當來說算了很高效的了.如果有什麼更好的方法,請多指教 謝謝 呼叫方法 string strsql select p.productid,p.proclassid,p.productname,p.profl...

MySQL 分頁查詢效能分析

mysql分頁查詢 今天研究了一下mysql的分頁查詢,記錄並分享如下 方式1 select from table order by id limit m,n 該語句的意思為,查詢m n條記錄,去掉前m條,返回後n條記錄。無疑該查詢能夠實現分頁功能,但是如果m的值越大,查詢的效能會越低 越後面的頁數...

Limit分頁查詢效能優化

1.語法 limit offset,rows 一般是用於select語句中用以從結果集中拿出特定的一部分資料。offset是偏移量,表示我們現在需要的資料是跳過多少行資料之後的,可以忽略 rows表示我們現在要拿多少行資料。2.栗子 select from mytbl limit 10000,100...