此代码需要很长时间才能运行。我有大约100,000条记录。 每个步骤大致采用相同的时间....从FMResultSet获取结果并将其读入3个数组。我尝试使用两个select语句。一个得到结果计数,然后在mutableArray中分配该数量。没有性能差异。有什么建议可以提高速度吗?
FMResultSet *results = [database executeQuery:@"SELECT FriendlyName, Serial, Barcode FROM Inventory, Company WHERE Inventory.friendlyName <> '' AND Company.CompanyID = Inventory.companyID AND Company.CompanyName = ?", selectedCompany];
arrayFriendlyName =[[NSMutableArray alloc]init];
arraySerial = [[NSMutableArray alloc]init];
arrayBarcode = [[NSMutableArray alloc]init];
while([results next]) {
[arrayFriendlyName addObject:[results stringForColumn:@"FriendlyName"]];
[arrayBarcode addObject:[results stringForColumn:@"Barcode"]];
[arraySerial addObject:[results stringForColumn:@"Serial"]];
}
[database close];
答案 0 :(得分:0)
根据您的数据库结构,当涉及到数千行时,围绕sqlite的任何面向对象的包装器都会非常慢。您可以尝试通过直接访问sqlite数据库来加快速度,而无需使用任何面向对象的包装器。由于您不需要任何关系(至少在您的示例代码中),您不会丢失任何相关功能 - 并且它将尽可能快。
与往常一样,Ray Wenderlich是一个很好的资源:http://www.raywenderlich.com/913/sqlite-tutorial-for-ios-making-our-app
如果您还没有这样做,您还可以查看是否在查询中设置了索引 - 因为您要加入两个表,在连接列上没有索引会严重影响您的性能。