2011-02-28 26 views
0

一个SQLite查询我一直在试图运行像一个查询:使用多个连接在C#

Insert into Members 
SELECT People.id, Names.value., Ages.value FROM People 
LEFT JOIN Names on Names.id = People.id 
LEFT JOIN Ages on Ages.id = People.id 

当SQLite的经理(几秒钟)执行它运行良好。但是当我在程序中运行它时需要一段不可接受的时间来执行(停止等待它)。我试过我自己的ExecuteNonQuery包装器(对于类)以及command.ExecuteNonQuery()

所有其他查询(包括连接/插入)都可以正常工作,它只是这一部分。我试过做连接作为视图,tempTables各种查询变化,这在SQLite经理,但不是我的解决方案:(

我的数据目前只有几千行,但将超过一百万时这是一个一次性的查询作为数据导入的一部分,我使用的是System.Data.SQLite。

是否有任何已知的问题用这种方法进行多个连接/大插入?(我的其他查询返回的小得多结果结果)我应该调查的LINQ或类似的(看相关的问题)。

感谢。

回答

1

你代码将查询传递给SQLite驱动程序,因此如果从代码运行查询的速度比SQLite Manager慢很多,则应该检查是否有驱动程序更新。

你可以尝试在这两个SQLite的经理执行explain insert into members (...)explain +您的整个查询),并从你的代码,并比较结果。这样你就可以看到是否选择了比其他更好的策略。

此外,请确保您在所有id字段上都有索引,因为这些字段提供了很好的性能优势。

Linq通常不会比普通查询更快。

+0

感谢堆。我只是做了索引,现在插入速度非常快!我知道这是显而易见的......我在完成所有导入后立即创建了所有索引,并认为我会最大限度地提高插入性能......由于我的导入过程是一种有效的批量插入,并且应用程序只读一次导入我想我总体我没有节省任何时间...再次感谢,这是显而易见的和noob错误,但我需要有人告诉我:) – DougF 2011-03-02 10:22:13

+0

为什么提到Linq?在问题或答案中我没有看到任何linq。 – 2013-09-21 13:34:48

+0

@AndrewArnott“我应该调查Linq还是类似的(查看相关问题)。”看问题的最后一行。 – 2013-09-21 17:51:29