我目前有两个名为'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)上运行。
谢谢!
答案 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);