SQLite中SELECT * FROM myTable WHERE 1=0是否会跳过表扫描?
SQLite中
WHERE 1=0查询的实际执行逻辑 虽然EXPLAIN QUERY PLAN显示"scan table myTable",但这个查询不会执行全表扫描,而是直接返回空结果集。
原因在于:
- SQLite的查询计划生成器(
EXPLAIN QUERY PLAN展示的内容)不会提前对1=0这种恒假条件做深度逻辑优化,所以会把全表扫描列在计划中,但这只是计划层面的描述。 - 在实际执行阶段,SQLite会直接识别
WHERE 1=0是永远不成立的条件,不会去遍历表中的任何行,直接返回空结果集。
你可以通过两种方式验证:
- 给
myTable插入大量数据,执行该查询,会发现耗时几乎为0,没有全表扫描的性能开销。 - 使用
EXPLAIN(不带QUERY PLAN)查看底层字节码,会发现没有生成遍历表行的指令,而是直接触发空结果的返回逻辑。
内容的提问来源于stack exchange,提问作者jason na
相关产品推荐
相关产品推荐

