我的查詢是一個非常大的數據庫上的選擇不同,在pgAdmin sql工具查詢本身持續12秒。如何優化SELECT DISTINCT sql的分頁?
SELECT DISTINCT ON (city, airport, zip, country, name) city, airport, price, id FROM mytable;
彈簧間歇讀取器的定義:
JpaPagingItemReader<MyEntity> reader;
reader.setPageSize(PAGE_SIZE);
如果我定義PAGE_SIZE
是作爲數據庫列作爲大,性能等於12秒。 但是,如果我將大小設置爲較低的值(例如1.000.000數據行數據庫中的頁面大小= 100.000),則性能非常差(大約只有10倍)。
Spring-batch在後臺對查詢應用特定的分頁。什麼是不:
query.setFirstResult();
query.setMaxResult();
如果頁面大小爲10,書房是執行的查詢如下:
firstResult, maxResult
0, 10
10, 10
20, 10
30, 10...
這又轉化爲LIMIT
和OFFSET
在SQL。
問題:是SELECT DISTINCT ON
不能與分頁LIMIT/OFFSET組合?對我來說,好像完全選擇不同的查詢在每次「分頁」運行時都被再次執行,並且因此持續很長時間。
因此,如果數據庫必須在應用maxresults之前做出完全不同的選擇,我可以臨時保存「distinct」選擇並獲取下一頁嗎?
我該如何改進這一點,而不必將分頁大小設置爲100萬。或者在這裏改進不可能?
使用查詢分析器來查看發生了什麼,如果那裏有列,而沒有索引可能會遇到麻煩。 – 2014-09-19 11:21:57
我有一個關於「城市,機場,郵編,國家,名稱」的索引。 – membersound 2014-09-19 11:23:24
如前所述,使用pgadmin工具來分析查詢(分頁和未分頁)的執行情況,看看發生了什麼以及需要花費那麼多時間。在postgresql指南中也提到了這一點*「由OFFSET子句跳過的行仍然需要在服務器內部進行計算;因此大的OFFSET可能效率低下。」* – 2014-09-19 11:25:34