为什么 DBD::SQLite 对 SQL 语句有不同的查询计划

Ren*_*ger 5 sql sqlite perl dbi sql-execution-plan

我有一个INSERT INTO... SELECT ... FROMSQL 语句,从命令行 shell 执行时运行速度可以接受SQLite's

但是,如果我使用 Perl 执行相同的语句(复制/粘贴)DBI::SQLite,则该语句会变慢。

原因一定是执行计划:当我让语句从 shell 和内部解释时DBI::SQLite,它们是不同的:快速版本使用最佳索引和表顺序,慢速版本选择以小于最佳方式。

所以,我有两个问题。

  1. 为什么计划不同?
  2. 如何才能使Perl环境中使用的计划与shell中使用的计划相同?