2016-07-15 107 views
0

我有一個700K +記錄的表,其中有一個簡單的GROUP BY查詢需要超過35+秒才能執行。我沒有關於如何優化這個的想法。在hsqldb中優化GROUP BY

SELECT TOP 10 called_dn, COUNT(called_dn) FROM reportview.calls_out GROUP BY called_dn; 
  • 在這裏我想補充TOP 10限制網絡傳輸引起的延遲。
  • 我有一個索引called_dn(hsqldb似乎沒有使用這個)。
  • called_dn不可空。
  • reportview.calls_out是一個緩存表。

這裏的表腳本:

CREATE TABLE calls_out (
    pk_global_call_id INTEGER GENERATED BY DEFAULT AS SEQUENCE seq_global_call_id NOT NULL, 
    sys_global_call_id VARCHAR(65), 
    call_start TIMESTAMP WITH TIME ZONE NOT NULL, 
    call_end TIMESTAMP WITH TIME ZONE NOT NULL, 
    duration_interval INTERVAL HOUR TO SECOND(0), 
    duration_seconds INTEGER, 
    call_segments INTEGER, 
    calling_dn VARCHAR(25) NOT NULL, 
    called_dn VARCHAR(25) NOT NULL, 
    called_via_dn VARCHAR(25), 
    fk_end_status INTEGER NOT NULL, 
    fk_incoming_queue INTEGER, 
    call_start_year INTEGER, 
    call_start_month INTEGER, 
    call_start_week INTEGER, 
    call_start_day INTEGER, 
    call_start_hour INTEGER, 
    call_start_minute INTEGER, 
    call_start_second INTEGER, 
    utc_created TIMESTAMP WITH TIME ZONE, 
    created_by VARCHAR(25), 
    utc_modified TIMESTAMP WITH TIME ZONE, 
    modified_by VARCHAR(25), 
    PRIMARY KEY (pk_global_call_id), 
    FOREIGN KEY (fk_incoming_queue) 
    REFERENCES lookup_incoming_queue(pk_id), 
    FOREIGN KEY (fk_end_status) 
    REFERENCES lookup_end_status(pk_id)); 

我我堅持這樣的表現或者是有什麼我可以嘗試加快這個查詢?

編輯:這裏的查詢計劃,如果有幫助:

isDistinctSelect=[false] 
isGrouped=[true] 
isAggregated=[true] 
columns=[ COLUMN: REPORTVIEW.CALLS_OUT.CALLED_DN not nullable 
    COUNT arg=[ COLUMN: REPORTVIEW.CALLS_OUT.CALLED_DN nullable] 
    [range variable 1 
    join type=INNER 
    table=CALLS_OUT 
    cardinality=771855 
    access=FULL SCAN 
    join condition = [index=SYS_IDX_SYS_PK_10173_10177]]] 
groupColumns=[COLUMN: REPORTVIEW.CALLS_OUT.CALLED_DN] 
offset=[VALUE = 0, TYPE = INTEGER] 
limit=[VALUE = 10, TYPE = INTEGER] 
PARAMETERS=[] 
SUBQUERIES[] 

回答

0

好,因爲它似乎沒有辦法避免這種情況下,全列掃描。

只是爲了未來的靈魂達到了這個問題的參考,這是我最終使出:

創自INSERT/DELETE保持彙總表中原始表觸發。這與適當的索引相結合,並在我的查詢中使用LIMIT USING INDEX子句產生非常好的性能。