哪个查询更有效?

时间:2012-02-02 23:21:56

标签: android sql sqlite optimization

我目前有两个名为'names'和'accounts'的表。我需要选择帐户启用的所有名称。所以我可以通过以下两种方式之一做到这一点,但我想知道哪种方式更快更有效?

第一种方法是选择所有已启用的帐户,然后在单独的查询中使用带有这些帐户的where子句(伪代码):

    SELECT account_id FROM accounts WHERE enabled=1;

然后

    SELECT * FROM names WHERE account_id IN (account_id_list);

或者我可以在表格上进行简单的连接:

    SELECT * FROM names JOIN accounts USING account_id WHERE enabled=1;

名称表大约为10-25k行,并且还将使用SQLite在移动设备(Android)上运行。

谢谢!

3 个答案:

答案 0 :(得分:1)

嵌套选择比联接更好,所以只需将前两个查询合并为一个:

SELECT * FROM names WHERE account_id IN (
SELECT account_id FROM accounts WHERE enabled=1);

答案 1 :(得分:0)

考虑到查询非常简单,SQL引擎在第一种情况下必须做的很多工作只是将数据格式化/传递给程序,只是为了让它立即发送回去并且必须再次解析它,第二个版本应该更有效率(并保存你的程序一些工作)

答案 2 :(得分:0)

SELECT * FROM names WHERE EXISTS (SELECT 1 FROM accounts WHERE account_id = names.account_id AND enabled=1);