python - 嵌套 SELECT 查询有时会停止

标签 python sql sqlite

我一直在 python 应用程序中使用 sqlite3,在测试它时,我的查询有时会导致程序卡住。一个粗略的(凭内存)示例:

SELECT id,name FROM main_table WHERE name IN 
(SELECT name FROM another_table WHERE another_table.attribute IN 
('foo', 'bar', 'baz'))

通常,当我第一次尝试这样的事情时,程序就会卡住。现在,如果我先尝试子查询,然后尝试整个嵌套困惑,它几乎立即起作用。

我猜测它正在缓存第一个更简单的查询的结果以供以后使用,这使得下一次的速度更快,但即便如此,我还是想知道如何首先避免这种停顿。

最佳答案

您没有提到任何有关索引的内容...两个表中的 name 至少应该建立索引。

这是使用 JOIN 的等效方法:

SELECT DISTINCT
       x.id,
       x.name 
  FROM main_table x
  JOIN ANOTHER_TABLE y ON y.name = x.name
                      AND y.attribute IN ('foo', 'bar', 'baz')

但请注意,如果 ANOTHER_TABLE 中有多个记录与 MAIN_TABLE 记录关联 - JOIN 将产生重复项。因此需要 DISTINCT(或 GROUP BY,如果这是您的偏好)。

EXISTS 可能是比 IN 更好的选择:

SELECT x.id,
       x.name 
  FROM main_table x
 WHERE EXISTS(SELECT NULL
                FROM ANOTHER_TABLE y 
               WHERE y.name = x.name
                 AND y.attribute IN ('foo', 'bar', 'baz'))

关于python - 嵌套 SELECT 查询有时会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3965178/

相关文章:

javascript - 如何在 GridView 中显示 NULL 值?

java - 如何获取sqlite中受影响的行数

c - 在 Windows 上将 SQLite 与 C 结合使用

python - 使用 scrapy 进行 CPU 密集型解析

python - Debug Exact Cover Pentominoes,维基百科示例不完整?或者...我误解了一些东西(包括代码)

python - 有没有一种有效的方法可以在 python 中将 2D 图存储为矢量图形?

Mysql if语句忽略第一个条件

sql - postgres中的嵌套选择

iphone - 如何使用 SQLITE3 LIKE 语句

python - 如何从生成的 Django 表单中删除文本?