接着再用while循环判断只要没有结束就取下条数据,将这10W条用TRACE打印出来……
杯具的是:取这10W条要很久…差不多5条/秒的速度(debug下)
伪码如下:
sqlite3_prepare(select * from Record order by 1);
sqlite3_step(pVM);
while (!Eof())
{
(const char*)sqlite3_column_text(m_pVM, nField);
int nRet = sqlite3_step(m_pVM);
}
问题:什么样的方式可以提高读取速度?
8 个解决方案
#1
10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。
#2
10W条不算多?你的意思是10W条数据读取所花的时间不算多?
release是更快,毕竟是优化过的
我在想如果将这些数据读取出来,并写到文件中…那会花很多时间
我的表很简单,就类似这样的:
Index | Name
0 | Alice
1 | Bob
#3
order by 1
你的第一列是什么?是否有索引?
另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);
你的第一列是什么?是否有索引?
另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);
#4
10w条数据从量上来说并不算太多。不是所花的时间。
你还没有正面回答,到底每行数据有多大?(平均多少个字节)
写文件本来就很费时间,你想要改善多少?
可以先缓存50条,写入文件50条批量执行,也许能有些改善。
#5
没有索引,只有2个字段一个是id 一个是 name
上面的是 伪码简写的
#6
每行数据很少~就是记下名字~
#7
没有索引当然慢了啊!先要读出所有的10W记录,然后再排序!
加上索引后再试。
加上索引后再试。
#8
居然没有索引,还要排序?
#1
10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。
#2
10W条不算多?你的意思是10W条数据读取所花的时间不算多?
release是更快,毕竟是优化过的
我在想如果将这些数据读取出来,并写到文件中…那会花很多时间
我的表很简单,就类似这样的:
Index | Name
0 | Alice
1 | Bob
#3
order by 1
你的第一列是什么?是否有索引?
另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);
你的第一列是什么?是否有索引?
另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);
#4
10w条数据从量上来说并不算太多。不是所花的时间。
你还没有正面回答,到底每行数据有多大?(平均多少个字节)
写文件本来就很费时间,你想要改善多少?
可以先缓存50条,写入文件50条批量执行,也许能有些改善。
#5
没有索引,只有2个字段一个是id 一个是 name
上面的是 伪码简写的
#6
每行数据很少~就是记下名字~
#7
没有索引当然慢了啊!先要读出所有的10W记录,然后再排序!
加上索引后再试。
加上索引后再试。
#8
居然没有索引,还要排序?