【问题标题】:How efficient is searching in SQL database?在 SQL 数据库中搜索的效率如何?
【发布时间】:2010-12-29 17:43:33
【问题描述】:

您好,我正在尝试将 std::map<key, value> 的数据写入 sql 数据库。在映射中,键被排序以便于查找,但是当我在映射项的 sql 中创建一个表时,搜索表以通过其键 id 获取记录有多难?

【问题讨论】:

  • 为什么需要搜索? “搜索”到底是什么意思?这就是 sql 的意义所在,因此您可以选择所需的数据。
  • 您是在问 SQL DB 是否比 std::map 更快?
  • 我想知道按键检索记录的速度有多快或多慢。

标签: c++ sql sqlite


【解决方案1】:

搜索会很容易,效率取决于您的索引是否正确。

【讨论】:

    【解决方案2】:

    大约和学习如何使用 SQL SELECT 语句一样难。

    【讨论】:

    • 这意味着一旦您知道如何使用 SQL,您的问题就会变得非常简单。换句话说,你唯一需要做的就是阅读一本关于 SQL 的书,你就完成了 99%。
    • 我已经知道该声明,但我在问我是否能够得到相同的结果。
    • Roberts - 不,学习编写 sql 语句是不够的。大多数书籍并没有提供交易的所有秘密。对于这种特殊情况,这可能微不足道,但并非总是如此。
    • 当然,我只是在评论这个案例。我无法回答一个单一的基本问题来回答所有案例。不仅不可能,而且无论如何也没有用。
    【解决方案3】:

    如果你想要的只是变量的“where”子句中的不同值,那么构造和解构多个 SQL 选择语句可能效率低下。

    存储过程很可能会更有效地执行此操作。

    【讨论】:

      【解决方案4】:

      您的问题含糊不清,但您似乎在比较苹果和橙子。 SQL 旨在高效搜索可扩展数据。 C(或任何其他语言)键值对仅限于 RAM,因此不是很可扩展。与 RDBMS 通信存在开销。存在内存压力、设计效率(即您选择的数据类型和索引)、C++ 为查找(哈希/b-tree)实现的算法等。

      归根结底,要问的正确问题是,“哪种工具最适合这项工作?” 就这样吧。

      【讨论】:

        【解决方案5】:

        假设您将数据从映射插入到数据库表中,您有表的主键,即您用于映射的键,并且由于映射不允许重复键,您对每条记录都有唯一键.

        在表的键上创建索引。一定要创建一个索引,否则你的所有查询都会进行全表扫描,而拥有唯一行的所有好处都会付诸东流。但请注意,如果您的 map 只有 100 行或其他内容,您将通过在表上创建索引来不必要地创建巨大的开销。

        跨数据库创建索引或多或少相同,但如果不知道您正在使用哪个数据库以及表中将存储多少数据,则很难估计效率。

        【讨论】:

          【解决方案6】:

          如果数据适合内存 std::map 将比任何 DB 更有效。

          一旦我使用内存数据库对 Sqlite3 进行了测试,std::map 就快了一个数量级(在这种情况下,sqlite 的速度非常快,比我见过的任何其他 RDBMS 都要快)

          原因:它提供对数据结构的直接访问,它没有任何中间层,并且允许非常快速地遍历树。

          但是,如果您的数据非常大,或者您不想使用太多内存,RDBMS 是一个很好的解决方案,并且给定索引键会非常快。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-01
            • 2020-10-25
            • 1970-01-01
            • 1970-01-01
            • 2012-02-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多