【问题标题】:Using multiple joins in a sqlite query in C#在 C# 的 sqlite 查询中使用多个连接
【发布时间】:2011-07-05 18:20:56
【问题描述】:

我一直在尝试运行如下查询:

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 还是类似的(查看相关问题)。

谢谢。

【问题讨论】:

    标签: c# .net sqlite join left-join


    【解决方案1】:

    您的代码将查询传递给 SQLite 驱动程序,因此如果从您的代码运行查询比 SQLite 管理器慢很多,您应该检查是否有适合您的驱动程序更新。

    您可以尝试在 SQLite 管理器和代码中执行 explain insert into members (...)explain + 整个查询),然后比较结果。通过这种方式,您可以查看其中一方是否选择了比另一方更好的策略。

    还要确保您在所有id 字段上都有索引,因为它们提供了巨大的性能优势。

    Linq 通常不应该比常规查询快。

    【讨论】:

    • 非常感谢。我刚刚做了索引,现在插入非常快!我知道这很明显......我在完成所有导入后立即创建了所有索引,以为我会最大化插入性能......因为我的导入过程是一个有效的批量插入,并且应用程序只读一次导入我想我总的来说我没有节省任何时间......再次感谢,这很明显是一个菜鸟错误,但我需要有人告诉我:)
    • 为什么要引用 Linq?我在问题或答案中看不到任何 linq。
    • @AndrewArnott “我应该调查 Linq 还是类似的(查看相关问题)。”请参阅问题的最后一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2022-01-12
    • 2019-02-08
    • 2019-09-19
    相关资源
    最近更新 更多