【SQLite3】10W条数据全部读取出来速度问题

时间:2021-09-05 05:32:08
现在用for循环将10W条数据(表中就一个id和name字段)写入表中差不多10秒;
接着再用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完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。

#2


引用 1 楼 iihero 的回复:
10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。


10W条不算多?你的意思是10W条数据读取所花的时间不算多?
release是更快,毕竟是优化过的
我在想如果将这些数据读取出来,并写到文件中…那会花很多时间
我的表很简单,就类似这样的:

Index | Name
  0   | Alice
  1   | Bob

#3


order by 1
你的第一列是什么?是否有索引?

另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);

#4


引用 2 楼 freshow 的回复:
引用 1 楼 iihero 的回复:
10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。


10W条不算多?你的意思是10W条数据读取所花的时间不算多?
release是更快,毕竟是优化过的
我在想如果将这些数据读取……

10w条数据从量上来说并不算太多。不是所花的时间。
你还没有正面回答,到底每行数据有多大?(平均多少个字节)
写文件本来就很费时间,你想要改善多少?
可以先缓存50条,写入文件50条批量执行,也许能有些改善。

#5


引用 3 楼 acmain_chm 的回复:
order by 1
你的第一列是什么?是否有索引?

另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);


没有索引,只有2个字段一个是id 一个是 name
上面的是 伪码简写的

#6


引用 4 楼 iihero 的回复:
10w条数据从量上来说并不算太多。不是所花的时间。
你还没有正面回答,到底每行数据有多大?(平均多少个字节)
写文件本来就很费时间,你想要改善多少?
可以先缓存50条,写入文件50条批量执行,也许能有些改善。


每行数据很少~就是记下名字~

#7


没有索引当然慢了啊!先要读出所有的10W记录,然后再排序!

加上索引后再试。

#8


引用 5 楼 freshow 的回复:
引用 3 楼 acmain_chm 的回复:
order by 1
你的第一列是什么?是否有索引?

另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);


没有索引,只有2个字段一个是id 一个是 name
上面的是伪码简写的

居然没有索引,还要排序?

#1


10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。

#2


引用 1 楼 iihero 的回复:
10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。


10W条不算多?你的意思是10W条数据读取所花的时间不算多?
release是更快,毕竟是优化过的
我在想如果将这些数据读取出来,并写到文件中…那会花很多时间
我的表很简单,就类似这样的:

Index | Name
  0   | Alice
  1   | Bob

#3


order by 1
你的第一列是什么?是否有索引?

另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);

#4


引用 2 楼 freshow 的回复:
引用 1 楼 iihero 的回复:
10万条不算多。你用的如果是release版本,估计会快很多。
另外,即算是trace,也不必每条都打出来。可以编译step完以后总共花的时间即可。
你这个表有多少字段,一行记录平均有多长?光条数不一定能说明问题。


10W条不算多?你的意思是10W条数据读取所花的时间不算多?
release是更快,毕竟是优化过的
我在想如果将这些数据读取……

10w条数据从量上来说并不算太多。不是所花的时间。
你还没有正面回答,到底每行数据有多大?(平均多少个字节)
写文件本来就很费时间,你想要改善多少?
可以先缓存50条,写入文件50条批量执行,也许能有些改善。

#5


引用 3 楼 acmain_chm 的回复:
order by 1
你的第一列是什么?是否有索引?

另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);


没有索引,只有2个字段一个是id 一个是 name
上面的是 伪码简写的

#6


引用 4 楼 iihero 的回复:
10w条数据从量上来说并不算太多。不是所花的时间。
你还没有正面回答,到底每行数据有多大?(平均多少个字节)
写文件本来就很费时间,你想要改善多少?
可以先缓存50条,写入文件50条批量执行,也许能有些改善。


每行数据很少~就是记下名字~

#7


没有索引当然慢了啊!先要读出所有的10W记录,然后再排序!

加上索引后再试。

#8


引用 5 楼 freshow 的回复:
引用 3 楼 acmain_chm 的回复:
order by 1
你的第一列是什么?是否有索引?

另外这句也不对啊。应该直接编译的时候报错。
sqlite3_prepare(select * from Record order by 1);


没有索引,只有2个字段一个是id 一个是 name
上面的是伪码简写的

居然没有索引,还要排序?