objectbox / objectbox/objectbox-java
query use orderDesc is very slower than order
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Java
- Estrelas
- 4.6k
- Forks
- 311
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
android 8.0 huawei P9
objectVersion:2.4.0
I inserted 12w pieces of data into Message table
@Entity
public class Message implements Serializable {
@Id
public long id;
@Index
private long serverId;
@Index
private String sid;
.......
}
the query method:
private void queryTest() {
queryTest(1);
queryTest(10);
queryTest(50);
queryTest(100);
queryTest(1000);
queryTest(3000);
queryTest(6000);
queryTest(10000);
}
private void queryTest(int queryNum) {
long time = SystemClock.uptimeMillis();
List<Message> messageList = Message.getMessageListByServerID2("k-007-liushengyun", Long.MIN_VALUE, queryNum);
Log.d(TAG, "queryTest queryNum =" + queryNum + ",size=" + messageList.size() + ",orderTime=" + (SystemClock.uptimeMillis() - time));
time = SystemClock.uptimeMillis();
messageList = Message.getMessageListByServerID3("k-007-liushengyun", Long.MIN_VALUE, queryNum);
Log.d(TAG, "queryTest queryNum =" + queryNum + ",size=" + messageList.size() + ",orderDescTime=" + (SystemClock.uptimeMillis() - time));
messageList.clear();
}
public static List<Message> getMessageListByServerID2(String sid, long minServerID, int count) {
try {
Query<Message> query = StoreManager.getBoxStore().boxFor(Message.class).query()
.equal(Message_.sid, sid)
.greater(Message_.serverId, minServerID).or().equal(Message_.serverId, minServerID)
.order(Message_.serverId).build();
return count > 0 ? query.find(0, count) : query.find();
} catch (Exception e) {
SogouPlus.onException(e);
return new LinkedList<>();
}
}
public static List<Message> getMessageListByServerID3(String sid, long minServerID, int count) {
try {
Query<Message> query = StoreManager.getBoxStore().boxFor(Message.class).query()
.equal(Message_.sid, sid)
.greater(Message_.serverId, minServerID).or().equal(Message_.serverId, minServerID)
.orderDesc(Message_.serverId).build();
return count > 0 ? query.find(0, count) : query.find();
} catch (Exception e) {
SogouPlus.onException(e);
return new LinkedList<>();
}
}
the query result:(ms)
queryTest queryNum =1,size=1,orderTime=71
queryTest queryNum =1,size=1,orderDescTime=301
queryTest queryNum =10,size=10,orderTime=72
queryTest queryNum =10,size=10,orderDescTime=581
queryTest queryNum =50,size=50,orderTime=73
queryTest queryNum =50,size=50,orderDescTime=908
queryTest queryNum =100,size=100,orderTime=75
queryTest queryNum =100,size=100,orderDescTime=1079
queryTest queryNum =1000,size=1000,orderTime=114
queryTest queryNum =1000,size=1000,orderDescTime=1952
queryTest queryNum =3000,size=3000,orderTime=175
queryTest queryNum =3000,size=3000,orderDescTime=2504
queryTest queryNum =6000,size=6000,orderTime=293
queryTest queryNum =6000,size=6000,orderDescTime=2846
queryTest queryNum =10000,size=10000,orderTime=483
queryTest queryNum =10000,size=10000,orderDescTime=3123
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pelos métodos relatados getMessageListByServerID2 e getMessageListByServerID3 e, em seguida, reproduza queryTest no Android 8.0 com o conjunto de dados Message de 120.000 linhas. Compare os tempos e os resultados de order e orderDesc; considera-se concluído quando o comportamento da consulta descendente estiver explicado ou corrigido e coberto por uma verificação de regressão.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- android, java
- Domínio
- database, mobile
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 25/100