Android 数据库插入与字符串连接

Android 数据库插入与字符串连接,android,sqlite,string-concatenation,Android,Sqlite,String Concatenation,我有一个SQlite表,在其中我需要在一行中插入6项。这样的行有4000行。因此需要4000*6插入操作。为了减少这种情况,我将这六个项目连接起来,并将它们作为一列插入,因此只有4000个操作 但是我知道字符串连接操作的复杂性是O(n^2),其中n是字符串的编号。当我取回物品时,我需要将字符串分成6部分。相反,任何数据库操作(如插入/查询)的复杂性都是M*O(log(n)),其中M是行数,n是列,因为它维护B-tree结构 那我现在该怎么办?我应该将6个项目连接在一个项目中并插入它,然后再拆分它

我有一个
SQlite
表,在其中我需要在一行中插入6项。这样的行有4000行。因此需要4000*6插入操作。为了减少这种情况,我将这六个项目连接起来,并将它们作为一列插入,因此只有4000个操作

但是我知道字符串连接操作的复杂性是
O(n^2)
,其中n是字符串的编号。当我取回物品时,我需要将字符串分成6部分。相反,任何数据库操作(如插入/查询)的复杂性都是
M*O(log(n))
,其中M是行数,n是列,因为它维护
B-tree
结构


那我现在该怎么办?我应该将6个项目连接在一个项目中并插入它,然后再拆分它,还是应该将它们插入6列中并尝试6次查询它们?哪一个会节省时间

我更喜欢
SQLite
,因为您可以更轻松地过滤查询和管理数据

如果必须修改或删除字符串连接的一列,该怎么办? 使用
String
这将更加复杂,因为您必须拆分数据,找到要修改/删除的数据,然后将其重新插入数据库


我不明白为什么你必须“六次查询”(你是说一次一次地查询吗?):通过一个简单的查询,你可以得到一个包含你需要的所有数据的光标。

你所有的算法复杂性估计都是错误的

实现字符串连接的唯一最简单的方法是O(n²)。 当SQLite构造一个记录时,它已经知道有多少字符串以及它们有多大,所以它永远不需要重新分配或移动部分字符串。构造一个记录所需的实际时间是O(n)。(这会忽略字符串的大小,但如果我们假设所有字符串都具有相同的大小,这并不重要。)

即使SQLite插入多个字符串,它也会在插入表的B树之前构造记录

在B-树的任意位置插入一条记录是O(logm);如果你只是附加一条记录,它是O(1)


请注意,你的数字n和M不是无限大,而是有界的,所以你只有常数,所以你所有的时间实际上都是O(1)。
对你来说重要的是O符号隐藏的常数因子;找出问题的唯一方法是实际测量您的操作。

我不明白您在问什么。您可以使用一条sql insert/update语句插入/更新一行中的6项(=列)。您是否有需要通过数据库非规范化来解决的性能问题?