sql2008数据库,九百万条数据,如何快速查询?
各位大大帮忙解决一下把~~~只做查询,而且是select*查询全部九百万条数据,每3天就要执行一次,1.存储过程的话用时3分钟,2.索引我放到ID上了,用时1分零六秒(只...
各位大大帮忙解决一下把~~~
只做查询,而且是select * 查询全部九百万条数据,每3天就要执行一次,
1.存储过程的话用时3分钟,
2.索引我放到ID上了,用时1分零六秒(只查询ID),可程序中需要查询每行的所有数据(共4列)。新建索引了,但不太会用。。
3.用“select 列1,列2,列3,列4,from 表1” 的方法用时4分钟.....
4.在程序中需要将查询的结果放进datatable里,第一次执行的时候就取不出来,超时,后台在网上搜索方法将函数求值自动调用关掉了。倒是不提示超时了,但这样不是办法啊。。。
怎样才能更快的查询到数据呢???跪求各位大大~~~~~5555555
首先感谢magician547 ,vinson_shen, CactusZheng三位朋友的回答。
现在是这样的,取出数据不是为了显示或者分页,而是需要根据这些数据逐一进行其他功能的操作,这款程序是不联网的,是独立后台运行的,所以magician547您的答案我还要再考虑一下。
vinson_shen的答案,我是首先在本机上执行的,不是真正的服务器,不知道真正部署到电力网的服务器上速度会不会提高呢?
CactusZheng,这张表实在是无法分割了,因为数据是3000*3000无重复的数据表,也就是说我无法建立3000张表,每张表里3000条数据,可能是我没有理解您的意思 展开
只做查询,而且是select * 查询全部九百万条数据,每3天就要执行一次,
1.存储过程的话用时3分钟,
2.索引我放到ID上了,用时1分零六秒(只查询ID),可程序中需要查询每行的所有数据(共4列)。新建索引了,但不太会用。。
3.用“select 列1,列2,列3,列4,from 表1” 的方法用时4分钟.....
4.在程序中需要将查询的结果放进datatable里,第一次执行的时候就取不出来,超时,后台在网上搜索方法将函数求值自动调用关掉了。倒是不提示超时了,但这样不是办法啊。。。
怎样才能更快的查询到数据呢???跪求各位大大~~~~~5555555
首先感谢magician547 ,vinson_shen, CactusZheng三位朋友的回答。
现在是这样的,取出数据不是为了显示或者分页,而是需要根据这些数据逐一进行其他功能的操作,这款程序是不联网的,是独立后台运行的,所以magician547您的答案我还要再考虑一下。
vinson_shen的答案,我是首先在本机上执行的,不是真正的服务器,不知道真正部署到电力网的服务器上速度会不会提高呢?
CactusZheng,这张表实在是无法分割了,因为数据是3000*3000无重复的数据表,也就是说我无法建立3000张表,每张表里3000条数据,可能是我没有理解您的意思 展开
4个回答
展开全部
根据你说的需求:
"可程序中需要查询每行的所有数据"、“查询全部九百万条数据”
-------------------------------
这样的需求跟索引没有关系了(因为已经肯定是走全表扫描的了),要提高效率的办法就是:1、提高硬盘的io速度;2、增加内存以使sql server有更多的缓存。
另外,你程序不要一次性取那么多数据返回,这样会拖死的,建议你考虑变换下处理逻辑(如:分批取回--可以根据id列值进行分批;将数据直接在服务端存成文本再传回本地处理)。
"而是需要根据这些数据逐一进行其他功能的操作,这款程序是不联网的"
--------------------------------
就算这样的话,也不能一次性把9百万数据一次性取回,如果你非要取出来再操作的话,那你得考虑分批去取。或者你把处理逻辑写在存储过程,然后由SQL SERVER本身去完成逻辑处理。总之,不管怎样,你也是得优化你现在的处理逻辑(现有处理逻辑我觉得不合理,效率很低下)。
“真正部署到电力网的服务器上速度会不会提高呢”
------------------------
服务器当然比你本地要快得多啦,硬件配置根本就不同一个级别,但不管怎样,还是建议你参考上面的建议优化你的处理逻辑才行,否则,你系统的效率将很低。
"可程序中需要查询每行的所有数据"、“查询全部九百万条数据”
-------------------------------
这样的需求跟索引没有关系了(因为已经肯定是走全表扫描的了),要提高效率的办法就是:1、提高硬盘的io速度;2、增加内存以使sql server有更多的缓存。
另外,你程序不要一次性取那么多数据返回,这样会拖死的,建议你考虑变换下处理逻辑(如:分批取回--可以根据id列值进行分批;将数据直接在服务端存成文本再传回本地处理)。
"而是需要根据这些数据逐一进行其他功能的操作,这款程序是不联网的"
--------------------------------
就算这样的话,也不能一次性把9百万数据一次性取回,如果你非要取出来再操作的话,那你得考虑分批去取。或者你把处理逻辑写在存储过程,然后由SQL SERVER本身去完成逻辑处理。总之,不管怎样,你也是得优化你现在的处理逻辑(现有处理逻辑我觉得不合理,效率很低下)。
“真正部署到电力网的服务器上速度会不会提高呢”
------------------------
服务器当然比你本地要快得多啦,硬件配置根本就不同一个级别,但不管怎样,还是建议你参考上面的建议优化你的处理逻辑才行,否则,你系统的效率将很低。
推荐于2016-05-13 · 知道合伙人软件行家
关注
展开全部
首先,检索数据是为了通过检索的结果,得到讯息,如流水记录、对比记录、统计表格。
而,一个表格显示900W条记录,检索人很难从中获取需要的讯息。
所以,实际应用不会一次性检索大量的数据,而是从大量的数据中筛选一部份数据,或是对大量的数据进行统计计算。
决定检索速度的因素有:
1、表格设计对检索的影响:如合理的主键即索引设计。
2、检索语句的效率:如子句的应用、数据的分组、排序、筛选 等等。
3、数据库管理系统的配置:包括硬件配置、软件配置。
而,一个表格显示900W条记录,检索人很难从中获取需要的讯息。
所以,实际应用不会一次性检索大量的数据,而是从大量的数据中筛选一部份数据,或是对大量的数据进行统计计算。
决定检索速度的因素有:
1、表格设计对检索的影响:如合理的主键即索引设计。
2、检索语句的效率:如子句的应用、数据的分组、排序、筛选 等等。
3、数据库管理系统的配置:包括硬件配置、软件配置。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先需要知道的是你查询全部记录的目的,然后才能针对目的做修改。
建议根据目的做成一个存储过程或函数,将执行的结果输出处理,不要全部显示,因为输出也是需要消耗大量时间的。
建议将这个表分割一下,根据实际情况,看看能否分割成多张百万记录的表。执行的时候通过多线程进行操作。
因为不知道查询的目的,所以只能泛泛的说说我的想法,具体的优化方案需要具体分析。
建议根据目的做成一个存储过程或函数,将执行的结果输出处理,不要全部显示,因为输出也是需要消耗大量时间的。
建议将这个表分割一下,根据实际情况,看看能否分割成多张百万记录的表。执行的时候通过多线程进行操作。
因为不知道查询的目的,所以只能泛泛的说说我的想法,具体的优化方案需要具体分析。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
900万条你撞到datatable里也显示不下,也没有人会用一页看900万条数据,你可以从数据库段就分页显示出来,一次只传1000或多少的,这样速度就不会慢了。你这样900的数据库,不是查询的问题,网络传输程序响应都是需要时间的,只能缩减届国际的大小还缩小时间。
楼主建立索引了,但是是全表扫描其实没有where语句索引是基本排不上用场的,所以还是分页吧。每次取数据都是双top这样既可以用得上索引,又减少了返回数据集的大小。
楼主建立索引了,但是是全表扫描其实没有where语句索引是基本排不上用场的,所以还是分页吧。每次取数据都是双top这样既可以用得上索引,又减少了返回数据集的大小。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询