select * from ab1 表中有1000万条记录,慢怎么解决

时间:2021-11-02 23:21:13
用sql—2000,在查询分析中执行语句select * from ab1 
需要很长时间才能执行完,显示结果。
表中有1000万条记录,慢怎么解决。  谢谢

20 个解决方案

#1


1.建立主键或索引.
2.提高硬件配置.

#2


硬件:增加内存,换高性能CPU
软件: 加索引.

#3


这是最基本的语句,
把*换成字段名, 其它没啥好优化

#4


引用 3 楼 js_szy 的回复:
这是最基本的语句,
把*换成字段名, 其它没啥好优化


顶起,在sql查询中建议不要常用'*',指定字段名。

#5


下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条): 

(1)仅在主键上建立聚集索引,并且不划分时间段: 

Select gid,fariqi,neibuyonghu,title from tgongwen
用时:128470毫秒(即:128秒) 

(2)在主键上建立聚集索引,在fariq上建立非聚集索引: 

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用时:53763毫秒(54秒) 

(3)将聚合索引建立在日期列(fariqi)上: 

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用时:2423毫秒(2秒) 


详见:http://www.cnblogs.com/tintown/archive/2005/04/24/144272.html

#6


提升硬件
使用字段名取代 *

#7


你select 出1000W,谁看啊?有意义吗

#8


提升硬件,设计索引

#9


Select Top N 只取符合条件的前N条,太多也看不过来

#10


根据需要选择字段输出。尽量使用优化策略。

#11


1、提高硬件的配置了cup、内存、硬盘的读取速度。
2、软件最好把这样的大表建立复合索引或者分区表之类的,已提高性能。

#12


如果你是想看一哈各个字段的话,建议直接select top 10 * from ab1;没必要全部显示出来撒。

#13


1000万条记录,你全查出来又能怎样?

#14


其实显示结果浪费了很多的时间,我的测试结果
表记录1016万记录

select count(*) from tb      //Time 2046毫秒

select * into #tmp from tb   //Time 19516毫秒

select * from tb             //2分15秒,显示了230万条记录

#15


如果你的程序有这样的语句,改掉它是唯一的方法

#16


引用楼主 nmwwxxgg 的回复:
用sql—2000,在查询分析中执行语句select * from ab1 
需要很长时间才能执行完,显示结果。
表中有1000万条记录,慢怎么解决。  谢谢


如果是100w行数据都要的话,就BCP导出给他们吧。

提升硬盘的I/O也是不错的选择。

#17


1.看看你的电脑配置怎么样 电脑配置如果不是很好的话 当然会慢一点了
2.可以创建主键索引 加快查询速度
3.如果是在程序里要查询的这1000万行数据的话 我建议你写 一个存储过程 先在数据库中先预编译一下 这样在 程序中调这条 存储过程 就会很快了

#18


从1000万条里查n条
还是必须输出1000万条?

后者不应该
前者通过加合适的索引,速度不会慢

#19


分页吧

#20


引用楼主 nmwwxxgg 的回复:
用sql—2000,在查询分析中执行语句select * from ab1 
需要很长时间才能执行完,显示结果。
表中有1000万条记录,慢怎么解决。 谢谢


每个人都告诉你建索引,我想提醒楼主,水可载舟亦可覆舟,你先高清楚各个索引的区别,然后建立不同的索引看看效果,实践才能检验真理啊。。还有,如果楼主这个表插入更新很频繁记得定期索引重建。。
P.S 5楼叶子推荐的文章楼主可以看看。。

#1


1.建立主键或索引.
2.提高硬件配置.

#2


硬件:增加内存,换高性能CPU
软件: 加索引.

#3


这是最基本的语句,
把*换成字段名, 其它没啥好优化

#4


引用 3 楼 js_szy 的回复:
这是最基本的语句,
把*换成字段名, 其它没啥好优化


顶起,在sql查询中建议不要常用'*',指定字段名。

#5


下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条): 

(1)仅在主键上建立聚集索引,并且不划分时间段: 

Select gid,fariqi,neibuyonghu,title from tgongwen
用时:128470毫秒(即:128秒) 

(2)在主键上建立聚集索引,在fariq上建立非聚集索引: 

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用时:53763毫秒(54秒) 

(3)将聚合索引建立在日期列(fariqi)上: 

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用时:2423毫秒(2秒) 


详见:http://www.cnblogs.com/tintown/archive/2005/04/24/144272.html

#6


提升硬件
使用字段名取代 *

#7


你select 出1000W,谁看啊?有意义吗

#8


提升硬件,设计索引

#9


Select Top N 只取符合条件的前N条,太多也看不过来

#10


根据需要选择字段输出。尽量使用优化策略。

#11


1、提高硬件的配置了cup、内存、硬盘的读取速度。
2、软件最好把这样的大表建立复合索引或者分区表之类的,已提高性能。

#12


如果你是想看一哈各个字段的话,建议直接select top 10 * from ab1;没必要全部显示出来撒。

#13


1000万条记录,你全查出来又能怎样?

#14


其实显示结果浪费了很多的时间,我的测试结果
表记录1016万记录

select count(*) from tb      //Time 2046毫秒

select * into #tmp from tb   //Time 19516毫秒

select * from tb             //2分15秒,显示了230万条记录

#15


如果你的程序有这样的语句,改掉它是唯一的方法

#16


引用楼主 nmwwxxgg 的回复:
用sql—2000,在查询分析中执行语句select * from ab1 
需要很长时间才能执行完,显示结果。
表中有1000万条记录,慢怎么解决。  谢谢


如果是100w行数据都要的话,就BCP导出给他们吧。

提升硬盘的I/O也是不错的选择。

#17


1.看看你的电脑配置怎么样 电脑配置如果不是很好的话 当然会慢一点了
2.可以创建主键索引 加快查询速度
3.如果是在程序里要查询的这1000万行数据的话 我建议你写 一个存储过程 先在数据库中先预编译一下 这样在 程序中调这条 存储过程 就会很快了

#18


从1000万条里查n条
还是必须输出1000万条?

后者不应该
前者通过加合适的索引,速度不会慢

#19


分页吧

#20


引用楼主 nmwwxxgg 的回复:
用sql—2000,在查询分析中执行语句select * from ab1 
需要很长时间才能执行完,显示结果。
表中有1000万条记录,慢怎么解决。 谢谢


每个人都告诉你建索引,我想提醒楼主,水可载舟亦可覆舟,你先高清楚各个索引的区别,然后建立不同的索引看看效果,实践才能检验真理啊。。还有,如果楼主这个表插入更新很频繁记得定期索引重建。。
P.S 5楼叶子推荐的文章楼主可以看看。。

#21