Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我应该在Realm中使用@Index吗?_Android_Realm - Fatal编程技术网

Android 我应该在Realm中使用@Index吗?

Android 我应该在Realm中使用@Index吗?,android,realm,Android,Realm,我的数据库中最多有600000个领域对象。我在这里通过id(int)=、uuid=、和time(int)进行查询。关于@Index,我们很快也会为整数加上它。如果您关心速度,我可能会对不同的选项进行基准测试,看看哪种方法更适合您,因为在一般情况下,回答这些问题相当困难 关于事务,通常在一个事务中尽可能多地批处理会更快,因为创建和提交事务会带来开销,但事务中的所有内容都必须放在内存中。因此,根据数据集的大小,可能需要将其拆分为更小的批。再一次,做一个小的概念证明可能是最好的方法,看看什么在你的具体

我的数据库中最多有600000个领域对象。我在这里通过id(int)=、uuid=、和time(int)进行查询。关于@Index,我们很快也会为整数加上它。如果您关心速度,我可能会对不同的选项进行基准测试,看看哪种方法更适合您,因为在一般情况下,回答这些问题相当困难


关于事务,通常在一个事务中尽可能多地批处理会更快,因为创建和提交事务会带来开销,但事务中的所有内容都必须放在内存中。因此,根据数据集的大小,可能需要将其拆分为更小的批。再一次,做一个小的概念证明可能是最好的方法,看看什么在你的具体情况下效果最好

在任何查询中使用的任何字段上都应该使用
@Index


它极大地提高了性能/查询速度。

所以,我假设如果领域不能使用索引,它将进行“全行扫描”?这些索引是真正的b树索引,您可以在其中进行除equals查询或哈希表之外的其他查询吗?如何实现排序?结果集是在查询后还是在进行查询时在内存中排序的?领域是基于列的,因此搜索单个列实际上非常快。我们的索引是b+树,在查询后在内存中进行排序。这是否意味着即使我只访问结果集中的前两个对象,所有行都会被读取到内存中并进行排序?这取决于“读取到内存”的含义?Realm是一个具有零拷贝体系结构的内存映射数据库。当您执行查询时,我们会创建一个轻量级的数据结构(称为行访问器),它指向真实的数据,这是排序的内容,而不是数据本身。这一切都发生在C++中。没有数据被复制到java,它只是在C++中读取时才被读取的。这就是为什么我们的集合如此轻量级。ChristianMelchior,如果我使用字段作为主键和索引,会怎么样?还有多个索引字段?是否正确使用?即使是布尔值?这还会有什么不同吗?是的,它使查询速度更快。我可以为多个字段建立索引吗?你可以在一个字段上建立索引,但不幸的是,你不能有复合索引(一个索引对应两个字段)。啊,是的,你绝对可以在两个字段上都添加一个
@Index
。一个在
dateTime
上,另一个在
username
上。