在SQL数据库中搜索效率如何?

时间:2010-12-29 17:43:34

标签: c++ sql sqlite

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

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

与学习如何使用SQL SELECT语句一样困难。

答案 2 :(得分:0)

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

存储过程可能会更有效率。

答案 3 :(得分:0)

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

在一天结束时,要问的正确问题是,“哪种工具最适合这项工作?”,并将其留在那里。

答案 4 :(得分:0)

假设您正在将数据从地图插入到数据库表中,您拥有表的主键,即您用于地图的键,并且由于地图不允许重复键,因此每个记录都有唯一键。

在表的键上创建索引。创建索引,否则所有查询都将执行全表扫描,并且拥有唯一行的所有好处都会耗尽。但要注意,如果map只有100行或者其他内容,那么通过在表上创建索引会不必要地创建巨大的开销。

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

答案 5 :(得分:0)

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

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

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

但是,如果您的数据非常大或者您不想使用太多内存,那么RDBMS是一个很好的解决方案,并且在密钥上给出索引它会非常快。