比如说要返回:1万条记录.
可否第一次返回1-100,第一次返回101-200,一次类推....直到返回所有数据.
谢谢!
15 个解决方案
#1
类如: "Select * from Users".
#2
select top 100 * from table where id > ???
#3
希望这个查询要高效.
比如:
for(int i = 0; i < 1000 ; i++){
do_query();
}
1000次连续查询不断.(不是象某些论坛的翻页那样---感觉那样效率太低)
不知能否做到,在数据库中设置标识. 比如查完前100条记录后,第二次查询自动从101条开始查?
或者有没有更好的办法?
之所以要"一个数据库查询语句返回结果很多,是否可以分批返回", 就是象更好第控制查询过程.
随时可以中断查询查询.否则等待时间太长,还不能中断
希望得到更好的解决方法.
谢谢大家.
比如:
for(int i = 0; i < 1000 ; i++){
do_query();
}
1000次连续查询不断.(不是象某些论坛的翻页那样---感觉那样效率太低)
不知能否做到,在数据库中设置标识. 比如查完前100条记录后,第二次查询自动从101条开始查?
或者有没有更好的办法?
之所以要"一个数据库查询语句返回结果很多,是否可以分批返回", 就是象更好第控制查询过程.
随时可以中断查询查询.否则等待时间太长,还不能中断
希望得到更好的解决方法.
谢谢大家.
#4
>> select top 100 * from table where id > ???
// 如果这样作是否效率太低.
for(int i = 0; i < 1000 ; i++){
select top 100 * from table where id > ???
}
每次从头查起??
// 如果这样作是否效率太低.
for(int i = 0; i < 1000 ; i++){
select top 100 * from table where id > ???
}
每次从头查起??
#5
//我希望程序伪代码如下:
for(int i = 0; i < 1000 ; i++){
move_to_point(i*100); // 移动数据库中表的当前位置
get_recorder_from_cur_point(100); // 获取从当前位置开始的100条数据数据
}
不知可否实现?
for(int i = 0; i < 1000 ; i++){
move_to_point(i*100); // 移动数据库中表的当前位置
get_recorder_from_cur_point(100); // 获取从当前位置开始的100条数据数据
}
不知可否实现?
#6
可以
#7
>>可以
如何作呢?请指点
如何作呢?请指点
#8
象ADO,对RecordSet,有Move(),可以移动数据集指针,然后取100条记录就可以了。
#9
看这里:
CString strQry;
strQry = "SELECT * FROM Recs";
CADORecordset pRs;
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 关键是这里运行时间太长
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
// 关键是这里运行时间太长
if(!pRs.Open((LPCTSTR)strQry)) return false;
你的意思是使用Move(),但那在这条语句之后啊!
现在,这条查询语句是瓶颈!
我的意思是:如何让其100条为单位进行查询,然后不断推经数据指针。
这样可以更好地控制查询过程。随时可以中断查询。
CString strQry;
strQry = "SELECT * FROM Recs";
CADORecordset pRs;
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 关键是这里运行时间太长
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
// 关键是这里运行时间太长
if(!pRs.Open((LPCTSTR)strQry)) return false;
你的意思是使用Move(),但那在这条语句之后啊!
现在,这条查询语句是瓶颈!
我的意思是:如何让其100条为单位进行查询,然后不断推经数据指针。
这样可以更好地控制查询过程。随时可以中断查询。
#10
if(!pRs.Open((LPCTSTR)strQry)) return false; //你的数据库相当大?
//
那还是用Select top
或者,一次查询,多次使用(实时性不好)
//
那还是用Select top
或者,一次查询,多次使用(实时性不好)
#11
或者建立一个存储过程
#12
CADORecordset pRs;
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 有没有可能先返回前100条记录!!!
// 然后通过循环逐条得到其他记录
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 有没有可能先返回前100条记录!!!
// 然后通过循环逐条得到其他记录
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
#13
和我想提问的问题一模一样,期待高手指点!
帮顶!
帮顶!
#14
使用cursor或者move都会很慢
如果不对表结构进行技术处理,还是top更好
要想分页查询速度最快,可以考虑建一个关联的链表b(table)
这样就可以使用select a.* from a,b where a.id=b.id and b.num between n1 and n2
如果不对表结构进行技术处理,还是top更好
要想分页查询速度最快,可以考虑建一个关联的链表b(table)
这样就可以使用select a.* from a,b where a.id=b.id and b.num between n1 and n2
#15
似乎只能用Top
#1
类如: "Select * from Users".
#2
select top 100 * from table where id > ???
#3
希望这个查询要高效.
比如:
for(int i = 0; i < 1000 ; i++){
do_query();
}
1000次连续查询不断.(不是象某些论坛的翻页那样---感觉那样效率太低)
不知能否做到,在数据库中设置标识. 比如查完前100条记录后,第二次查询自动从101条开始查?
或者有没有更好的办法?
之所以要"一个数据库查询语句返回结果很多,是否可以分批返回", 就是象更好第控制查询过程.
随时可以中断查询查询.否则等待时间太长,还不能中断
希望得到更好的解决方法.
谢谢大家.
比如:
for(int i = 0; i < 1000 ; i++){
do_query();
}
1000次连续查询不断.(不是象某些论坛的翻页那样---感觉那样效率太低)
不知能否做到,在数据库中设置标识. 比如查完前100条记录后,第二次查询自动从101条开始查?
或者有没有更好的办法?
之所以要"一个数据库查询语句返回结果很多,是否可以分批返回", 就是象更好第控制查询过程.
随时可以中断查询查询.否则等待时间太长,还不能中断
希望得到更好的解决方法.
谢谢大家.
#4
>> select top 100 * from table where id > ???
// 如果这样作是否效率太低.
for(int i = 0; i < 1000 ; i++){
select top 100 * from table where id > ???
}
每次从头查起??
// 如果这样作是否效率太低.
for(int i = 0; i < 1000 ; i++){
select top 100 * from table where id > ???
}
每次从头查起??
#5
//我希望程序伪代码如下:
for(int i = 0; i < 1000 ; i++){
move_to_point(i*100); // 移动数据库中表的当前位置
get_recorder_from_cur_point(100); // 获取从当前位置开始的100条数据数据
}
不知可否实现?
for(int i = 0; i < 1000 ; i++){
move_to_point(i*100); // 移动数据库中表的当前位置
get_recorder_from_cur_point(100); // 获取从当前位置开始的100条数据数据
}
不知可否实现?
#6
可以
#7
>>可以
如何作呢?请指点
如何作呢?请指点
#8
象ADO,对RecordSet,有Move(),可以移动数据集指针,然后取100条记录就可以了。
#9
看这里:
CString strQry;
strQry = "SELECT * FROM Recs";
CADORecordset pRs;
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 关键是这里运行时间太长
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
// 关键是这里运行时间太长
if(!pRs.Open((LPCTSTR)strQry)) return false;
你的意思是使用Move(),但那在这条语句之后啊!
现在,这条查询语句是瓶颈!
我的意思是:如何让其100条为单位进行查询,然后不断推经数据指针。
这样可以更好地控制查询过程。随时可以中断查询。
CString strQry;
strQry = "SELECT * FROM Recs";
CADORecordset pRs;
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 关键是这里运行时间太长
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
// 关键是这里运行时间太长
if(!pRs.Open((LPCTSTR)strQry)) return false;
你的意思是使用Move(),但那在这条语句之后啊!
现在,这条查询语句是瓶颈!
我的意思是:如何让其100条为单位进行查询,然后不断推经数据指针。
这样可以更好地控制查询过程。随时可以中断查询。
#10
if(!pRs.Open((LPCTSTR)strQry)) return false; //你的数据库相当大?
//
那还是用Select top
或者,一次查询,多次使用(实时性不好)
//
那还是用Select top
或者,一次查询,多次使用(实时性不好)
#11
或者建立一个存储过程
#12
CADORecordset pRs;
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 有没有可能先返回前100条记录!!!
// 然后通过循环逐条得到其他记录
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
pRs = CADORecordset(&m_pDb);
if(!pRs.Open((LPCTSTR)strQry)) return false; // 有没有可能先返回前100条记录!!!
// 然后通过循环逐条得到其他记录
while(!pRs.IsEof())
{
//
pRs.GetFieldValue(...);
.....
pRs.MoveNext();
}
#13
和我想提问的问题一模一样,期待高手指点!
帮顶!
帮顶!
#14
使用cursor或者move都会很慢
如果不对表结构进行技术处理,还是top更好
要想分页查询速度最快,可以考虑建一个关联的链表b(table)
这样就可以使用select a.* from a,b where a.id=b.id and b.num between n1 and n2
如果不对表结构进行技术处理,还是top更好
要想分页查询速度最快,可以考虑建一个关联的链表b(table)
这样就可以使用select a.* from a,b where a.id=b.id and b.num between n1 and n2
#15
似乎只能用Top