Hi, Kevin. 1. I've created an issue https://issues.apache.org/jira/browse/IGNITE-3453 for this and started a discussion on dev list. You can watch the issue to be immediately notified on task progress.
As a workaround try to avoid common fields in index definitions. 2. How do you measure a performance ? 3. You should run query several time before measuring a result to allow JVM to "warm up". It's common test practice. 2016-07-08 5:19 GMT+03:00 Zhengqingzheng <zhengqingzh...@huawei.com>: > Hi Alexei, > > I have tried to use only one group of index, and it works for me. However, > there are 3 issues: > > 1. I still need to define 3 different groups of indexes to speed up > all possible queries. But in this case, only one group index is allowed. > How to define other group indexes without problems? > > 2. The sql query time is about 16ms on local machine. It seems too > slow, as I have tested other sql queries within local machine, and the > query time is about 1 ~ 2 ms > > 3. It seems that no matter using get or sql query methods, the > first query time is always higher than the rest of other queries. > > > > > > And the explain information of my sql with only one group index is listed > as follows (call sql query twice and the first time shows explain info): > > > > Time:78; result1:[[SELECT > > GUID AS __C0 > > FROM "com.huawei.soa.ignite.model.IgniteMetaIndex_Cache".IGNITEMETAINDEX > > /* > "com.huawei.soa.ignite.model.IgniteMetaIndex_Cache"."objId_fieldNum_stringValue": > STRINGVALUE = ?3 > > AND OBJID = ?1 > > AND FIELDNUM = ?2 > > */ > > WHERE (STRINGVALUE = ?3) > > AND ((OBJID = ?1) > > AND (FIELDNUM = ?2))], [SELECT > > __C0 AS GUID > > FROM PUBLIC.__T0 > > /* "com.huawei.soa.ignite.model.IgniteMetaIndex_Cache"."merge_scan" > */]] > > ----------------------------------- > > result size:1 > > ----------------------------------- > > Time used in index cache query: 16ms > > Time:16; result2:[50116926] > > > > > > Best regards, > > Kevin > > > > *发件人:* Alexei Scherbakov [mailto:alexey.scherbak...@gmail.com] > *发送时间:* 2016年7月7日 0:59 > *收件人:* user > *主题:* Re: 答复: ignite group indexing not work problem > > > > Hi, Kevin. > > > > Have you defined other composite indexes including objid, fieldnum fields ? > > If yes, try to disable them and check if query picks up correct index. > > > > > > 2016-07-05 15:45 GMT+03:00 Zhengqingzheng <zhengqingzh...@huawei.com>: > > Hi Alexei, > > Indexing not work again. This time I print the query plan: > > > > [SELECT > > GUID AS __C0 > > FROM "com.huawei.soa.ignite.model.IgniteMetaIndex_Cache".IGNITEMETAINDEX > > /* > "com.huawei.soa.ignite.model.IgniteMetaIndex_Cache"."objId_fieldNum_numValue": > OBJID = ?1 > > AND FIELDNUM = ?2 > > */ > > WHERE (STRINGVALUE = ?3) > > AND ((OBJID = ?1) > > AND (FIELDNUM = ?2))], [SELECT > > __C0 AS GUID > > FROM PUBLIC.__T0 > > /* "com.huawei.soa.ignite.model.IgniteMetaIndex_Cache"."merge_scan" */] > > > > It seems that the group index is broken, as I can see only objId and > fieldnum are used to check the index, however, I defined three columns: > objid, fieldnum and stringvalue > > And the order is incorrect. > > My query is : > > String qryStr = " explain select guid from IgniteMetaIndex where objid=? > and fieldnum=? and stringvalue=? "; > > … > > fieldQry.setArgs( "a1162", 7 ,"18835473249"); > > > > hope you can help me. > > > > > > Best regards, > > Kevin > > *发件人:* Alexei Scherbakov [mailto:alexey.scherbak...@gmail.com] > *发送时间:* 2016年6月29日 0:30 > *收件人:* user > *主题:* Re: ignite group indexing not work problem > > > > Hi, > > > > I've tried the provided sample and found what instead of using > oId_fNum_num index H2 engine prefers oId_fNum_date, > > thus preventing condition on num field to use index. > > > > I think it's incorrect behavior. > > > > Could you disable oId_fNum_date, execute the query again and provide me > with the query plan and execution time ? > > > > You can get query plan from build-in H2 console. Read more about how to > setup console here [1] > > > > [1] https://apacheignite.readme.io/docs/sql-queries#using-h2-debug-console > > > > > > > > > > 2016-06-28 6:08 GMT+03:00 Zhengqingzheng <zhengqingzh...@huawei.com>: > > Hi there, > > My ignite in-memory sql query is very slow. Anyone can help me to figure > out what was wrong? > > > > I am using group indexing to speed up in-memory sql queries. I notice that > my sql query took 2274ms (data set size: 10Million, return result:1). > > > > My query is executed as: > > String qryStr = "select * from UniqueField where oid= ? and fnum= ? and > num= ?"; > > > > String oId="a343"; > > int fNum = 3; > > BigDecimal num = new BigDecimal("510020000982136"); > > > > IgniteCache cache = > igniteMetaUtils.getIgniteCache(IgniteMetaCacheType.UNIQUE_INDEX); // to > get selected cache ,which has been created in some other place > > > > SqlQuery qry = new SqlQuery(UniqueField.class, qryStr); > > qry.setArgs(objId,fieldNum, numVal); > > long start = System.currentTimeMillis(); > > List result= cache.query(qry).getAll(); > > long end = System.currentTimeMillis(); > > System.out.println("Time used in query :"+ (end-start)+"ms"); > > > > And the result shows: Time used in query :2274ms > > > > I have set group indexes, and the model is defined as: > > import java.io.Serializable; > > import java.math.BigDecimal; > > import java.util.Date; > > > > import org.apache.ignite.cache.query.annotations.QuerySqlField; > > > > public class UniqueField implements Serializable > > { > > > > @QuerySqlField > > private String orgId; > > > > @QuerySqlField( > > orderedGroups={ > > @QuerySqlField.Group( > > name="oId_fNum_ msg ", order=1, descending = true), > > @QuerySqlField.Group( > > name="oId_fNum_ num ", order=1, descending = > true), > > @QuerySqlField.Group( > > name="oId_fNum_ date ", order=1, descending = true) > > > > }) > > private String oId; > > > > @QuerySqlField(index=true) > > private String gId; > > > > @QuerySqlField( > > orderedGroups={ > > @QuerySqlField.Group( > > name="oId_fNum_ msg ", order=2, descending = true), > > @QuerySqlField.Group( > > name="oId_fNum_ num ", order=2, descending = > true), > > @QuerySqlField.Group( > > name="oId_fNum_ date ", order=2, descending = true) > > > > }) > > private int fNum; > > > > @QuerySqlField(index=true, @QuerySqlField.Group( > > name="oId_fNum_ msg ", order=3, descending = true)}) > > private String msg; > > > > @QuerySqlField(index=true, @QuerySqlField.Group( > > name="oId_fNum_ num ", order=3, descending = true)}) > > private BigDecimal num; > > > > @QuerySqlField(index=true, @QuerySqlField.Group( > > name="oId_fNum_ date ", order=3, descending = true)}) > > private Date date; > > > > public UniqueField(){}; > > > > public UniqueField( > > String orgId, > > String oId, > > String gId, > > int fNum, > > String msg, > > BigDecimal num, > > Date date > > ){ > > this.orgId=orgId; > > this.oId=oId; > > this.gId = gId; > > this.fNum = fNum; > > this.msg = msg; > > this.num = num; > > this.date = date; > > } > > > > public String getOrgId() > > { > > return orgId; > > } > > > > public void setOrgId(String orgId) > > { > > this.orgId = orgId; > > } > > > > public String getOId() > > { > > return oId; > > } > > > > public void setOId(String oId) > > { > > this.oId = oId; > > } > > > > public String getGid() > > { > > return gId; > > } > > > > public void setGuid(String gId) > > { > > this.gId = gId; > > } > > > > public int getFNum() > > { > > return fNum; > > } > > > > public void setFNum(int fNum) > > { > > this.fNum = fNum; > > } > > > > public String getMsg() > > { > > return msg; > > } > > > > public void setMsg(String msg) > > { > > this.msg = msg; > > } > > > > public BigDecimal getNum() > > { > > return num; > > } > > > > public void setNum(BigDecimal num) > > { > > this.num = num; > > } > > > > public Date getDate() > > { > > return date; > > } > > > > public void setDate(Date date) > > { > > this.date = date; > > } > > > > } > > > > > > > > > > > > > > -- > > > Best regards, > > Alexei Scherbakov > > > > > > -- > > > Best regards, > > Alexei Scherbakov > -- Best regards, Alexei Scherbakov