我正在尝试制作一个构建RealmQuery
。
但这是我的问题。我想知道给定查询之间的性能差异是什么?
1.使用WHERE子句选择所有记录。
SELECT * FROM table WHERE gender = 'M' OR gender = 'F';
Realm.where(SOME_CLASS.class)
.equalTo("gender", "M")
.equalTo("gender", "F")
.findAll();
2.选择WHERE~IN的所有记录。
SELECT * FROM table WHERE gender IN ('M', 'F');
Realm.where(SOME_CLASS.class)
.in("gender", new String[] {"M", "F"})
.findAll();
3.选择没有WHERE子句的所有记录。
SELECT * FROM table;
Realm.where(SOME_CLASS.class)
.findAll();
请注意,列gender
仅包含M
或F
。
我认为所有这些查询都返回相同的结果,但我想知道它在内部是如何工作的以及这些查询之间的性能。
感谢您的有趣和抱歉我的英语不好。
答案 0 :(得分:3)
以下两个条件在功能上相同:
WHERE gender = 'M' OR gender = 'F'
WHERE gender IN ('M', 'F')
前两个查询都需要检查每条记录的性别值。由于每条记录都是匹配的,因此无论是否存在索引都不会有太大的区别,因为无论如何都会命中整个表。没有WHERE
子句的第三个查询也将执行全表扫描,但不必在WHERE
子句中进行任何检查。出于这个原因,所有其他因素都相同,我希望第三个查询的表现优于前两个。
但是,通过使用EXPLAIN
或类似工具分析数据库上的这些查询,可以得到公司对您的问题的答案。