给定查询之间的性能差异?

时间:2018-01-15 05:40:47

标签: java sql realm

我正在尝试制作一个构建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仅包含MF
我认为所有这些查询都返回相同的结果,但我想知道它在内部是如何工作的以及这些查询之间的性能。

感谢您的有趣和抱歉我的英语不好。

1 个答案:

答案 0 :(得分:3)

以下两个条件在功能上相同:

WHERE gender = 'M' OR gender = 'F'
WHERE gender IN ('M', 'F')

前两个查询都需要检查每条记录的性别值。由于每条记录都是匹配的,因此无论是否存在索引都不会有太大的区别,因为无论如何都会命中整个表。没有WHERE子句的第三个查询也将执行全表扫描,但不必在WHERE子句中进行任何检查。出于这个原因,所有其他因素都相同,我希望第三个查询的表现优于前两个。

但是,通过使用EXPLAIN或类似工具分析数据库上的这些查询,可以得到公司对您的问题的答案。