第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問在應用極限前得到結(jié)果計數(shù)的最佳方法

請問在應用極限前得到結(jié)果計數(shù)的最佳方法

斯蒂芬大帝 2019-10-22 17:12:47
在應用極限前得到結(jié)果計數(shù)的最佳方法當分頁瀏覽來自DB的數(shù)據(jù)時,您需要知道有多少頁將呈現(xiàn)頁面跳轉(zhuǎn)控件。目前,我通過運行查詢兩次,一次是在count()要確定結(jié)果的總數(shù),第二次要有一個限制,以獲得當前頁面所需的結(jié)果。這似乎沒有效率。有沒有更好的方法來確定之前會返回多少個結(jié)果?LIMIT申請了?我正在使用PHP和Postgres。
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經(jīng)驗 獲得超3個贊

純SQL

自2008年以來,情況發(fā)生了變化。您可以使用窗口函數(shù)若要在一個查詢中獲得完整計數(shù)和有限結(jié)果,請執(zhí)行以下操作。(與2009年P(guān)ostgreSQL 8.4).

SELECT foo     , count(*) OVER() AS full_count
FROM   bar
WHERE  <some condition>ORDER  BY <some col>LIMIT  <pagesize>OFFSET <offset>

請注意,這可能比沒有總數(shù)要昂貴得多。必須對所有行進行計數(shù),從匹配索引中僅取頂部行的可能快捷方式可能不再有幫助。
跟小桌子沒什么關(guān)系full_count <= OFFSET + LIMIT..大得多的事情full_count.

角箱*何時OFFSET至少與基本查詢中的行數(shù)一樣大,無排會被歸還。所以你也不會full_count..可能的備選辦法:

  • 運行帶有限制/偏移量的查詢,并獲得行總數(shù)

考慮來龍去脈:

  1. WHERE條款(及JOIN條件,而不是這里)從基表中篩選符合條件的行。

    (GROUP BY聚合函數(shù)就在這里)。

  2. 窗口函數(shù)的應用考慮了所有符合條件的行(取決于OVER子句和函數(shù)的框架規(guī)范)。簡約count(*) OVER()基于所有行。

  3. ORDER BY

    (DISTINCTDISTINCT ON)

  4. LIMIT / OFFSET根據(jù)已建立的順序應用于選擇要返回的行。

LIMIT / OFFSET隨著表中行數(shù)的增加,效率越來越低。如果需要更好的性能,請考慮其他方法:

  • 在大表上使用偏移量優(yōu)化查詢

獲得最終計票的備選方案

獲取受影響行數(shù)的方法完全不同(以前的全部計數(shù)OFFSET & LIMIT適用)。Postgres有內(nèi)部簿記,有多少行受上一條SQL命令的影響。一些客戶端可以訪問該信息或計數(shù)行本身(如psql)。

例如,可以檢索plpgsql在執(zhí)行SQL命令之后立即使用:

GET DIAGNOSTICS integer_var = ROW_COUNT;

手冊中的細節(jié)。

或者你可以用pg_num_rows在……里面PHP..或者其他客戶的類似功能。

有關(guān):



查看完整回答
反對 回復 2019-10-23
?
墨色風雨

TA貢獻1853條經(jīng)驗 獲得超6個贊

正如我所描述的在我的博客上,MySQL有一個名為SQL_CALC_FRED行..這消除了執(zhí)行兩次查詢的需要,但它仍然需要完整地執(zhí)行查詢,即使限制子句允許它提前停止。

據(jù)我所知,PostgreSQL沒有類似的特性。在執(zhí)行分頁(使用IMHO時最常見的限制)時,需要注意的一件事情是:執(zhí)行“偏移量1000限制10”意味著DB必須獲取至少1010行,即使它只給出10行。一個更有表現(xiàn)力的方法是記住您要為前一行排序的行的值(在本例中是第1000行),并重寫如下查詢:“.order_row>value_of_1000_thLim10”。優(yōu)點是“ORDER_ROW”很可能是索引的(如果不是,您就有問題了)。缺點是,如果在頁面視圖之間添加了新元素,則可能會出現(xiàn)一些不同步的情況(但同樣,訪問者可能無法觀察到這一點,并且可以獲得很大的性能增益)。



查看完整回答
反對 回復 2019-10-23
  • 3 回答
  • 0 關(guān)注
  • 425 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號