[SQL表查询在Apache Ignite中很慢

问题描述 投票:0回答:1

我们会不断收到有关选择查询执行的警告。

[20:30:16,798][WARNING][query-#75][IgniteH2Indexing] Long running query is finished [duration=5534ms, type=MAP, distributedJoin=false, enforceJoinOrder=false, lazy=false, schema=PUBLIC, sql='SELECT
"__Z0"."ID" "__C0_0",
"__Z0"."URL" "__C0_1",
"__Z0"."SCORE" "__C0_2",
"__Z0"."APPNAME_ID" "__C0_3"
FROM "PUBLIC"."URLS" "__Z0"
WHERE "__Z0"."APPNAME_ID" = ?1
ORDER BY 3 FETCH FIRST ?2 ROWS ONLY', plan=SELECT
    __Z0.ID AS __C0_0,
    __Z0.URL AS __C0_1,
    __Z0.SCORE AS __C0_2,
    __Z0.APPNAME_ID AS __C0_3
FROM PUBLIC.URLS __Z0
    /* PUBLIC.URLS.__SCAN_ */
    /* scanCount: 1541722 */
WHERE __Z0.APPNAME_ID = ?1
ORDER BY 3
FETCH FIRST ?2 ROWS ONLY, node=TcpDiscoveryNode [id=9b49bd18-a35d-44b9-a6d7-e28444b061cc, consistentId=9b49bd18-a35d-44g9-a6d7-e280b4b061cc, addrs=ArrayList [0:0:0:0:0:0:0:1%lo0, 127.0.0.1, 192.168.32.10], sockAddrs=HashSet [/192.168.32.10:0, /0:0:0:0:0:0:0:1%lo0:0, /127.0.0.1:0], discPort=0, order=3, intOrder=3, lastExchangeTime=1188336578528, loc=false, ver=8.7.10#20191227-sha1:c481141d, isClient=true], reqId=39750, segment=0]

SQL创建语句为

CREATE TABLE IF NOT EXISTS URLS (" +
                        " ID LONG PRIMARY KEY, URL VARCHAR, SCORE DOUBLE, APPNAME_ID LONG) " +
                        " WITH \"TEMPLATE=PARTITIONED,ATOMICITY=ATOMIC,WRITE_SYNCHRONIZATION_MODE=PRIMARY_SYNC,BACKUPS=0\"

索引创建语句为

CREATE INDEX IF NOT EXISTS IDX_2_URLS ON URLS (APPNAME_ID, SCORE)

[当记录达到更高数量时,我们得到的是警告。有人可以提出一些提高性能的想法吗?

sql indexing ignite sql-execution-plan gridgain
1个回答
1
投票

您仅对APPNAME_ID有条件,因此无法使用您的索引,因此将按顺序扫描整个表。字段在索引中的位置很重要。

如果需要,您需要在(APPNAME_ID)或(APPNAME_ID,SCORE)上建立索引。在执行SELECT的过程中只能使用一个索引,并且只能用于在索引中排在最前面的那些列。一旦索引中的下一个字段在WHERE中没有条件,所有其余的都将被忽略。

© www.soinside.com 2019 - 2024. All rights reserved.