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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在應(yīng)用極限前得到結(jié)果計(jì)數(shù)的最佳方法

在應(yīng)用極限前得到結(jié)果計(jì)數(shù)的最佳方法

慕哥6287543 2019-07-15 16:35:42
在應(yīng)用極限前得到結(jié)果計(jì)數(shù)的最佳方法當(dāng)分頁(yè)瀏覽來(lái)自DB的數(shù)據(jù)時(shí),您需要知道有多少頁(yè)將呈現(xiàn)頁(yè)面跳轉(zhuǎn)控件。目前,我通過(guò)運(yùn)行查詢兩次,一次是在count()要確定結(jié)果的總數(shù),第二次要有一個(gè)限制,以獲得當(dāng)前頁(yè)面所需的結(jié)果。這似乎沒(méi)有效率。有沒(méi)有更好的方法來(lái)確定之前會(huì)返回多少個(gè)結(jié)果?LIMIT申請(qǐng)了?我正在使用PHP和Postgres。
查看完整描述

3 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

純SQL

自2008年以來(lái),情況發(fā)生了變化。您可以使用窗口函數(shù)若要在一個(gè)查詢中獲得完整計(jì)數(shù)和有限結(jié)果,請(qǐng)執(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>

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

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

考慮來(lái)龍去脈:

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

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

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

  3. ORDER BY

    (DISTINCTDISTINCT ON)

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

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

獲得最終計(jì)票的備選方案

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

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

GET DIAGNOSTICS integer_var = ROW_COUNT;

手冊(cè)中的細(xì)節(jié)。

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

有關(guān):


查看完整回答
反對(duì) 回復(fù) 2019-07-15
?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

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

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


查看完整回答
反對(duì) 回復(fù) 2019-07-15
  • 3 回答
  • 0 關(guān)注
  • 404 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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