‘壹’ sql 查询结果太多(数万条),导致运行很慢,甚至内存不足出现问题。有什么好的方法可以解决这个问题
我试过一下几个方法:
尝试把多余的进程关闭了,增加内存,这样速度和查询条数都会增多
如果有多个关联条件,并且可以拆分,建议用UNION ALL进行查询,效率会有所提高
如果你只要查询几千条看看效果,那楼上的朋友的建议也是可取的
尝试下查询中,使用索引列,速度也会有明显增加
具体情况具体分析,笼统的我也就知道这些了,我也是新手哇
‘贰’ sqlserver里有500多万条数据,请问怎么才能通过sqlserver做出如下的透视表呢因为数据太大,excel放不下
百万级别的就别用EXCEL了,不是EXCEL能解决的
‘叁’ 如何将sql中500万条数据通过VS导入到excel表中
Excel承载不了这么大的数据量,即使能导入,你也别想好好操作数据。因为Excel会一次性把全部的数据载入内存,你的电脑开消太大,必定使Excel“未响应”。
还是放弃这个念头吧。
我不明白,数据在数据库里好好的,为什么要一股脑儿导入EXCEL?在数据库中操作不是很方便吗?
‘肆’ sql查询语句在查询分析器里很快,但在.net中很慢。
表里有500W,那你age大于10的有多少?
如果有10条,理论上来说应该是一样的
如果是100W条,那你得写个分页程序了,查询分析器里肯定是没执行完,只是给你显示了一部分结果,你细看看,是不是查询分析器还是在运行状态
‘伍’ sql 超多数据怎么分区好点
这样的项目少于百万级别,就别做了,这百万还只是硬件的上的投入。这几天经常看到你问类似的问题。说实话,这样的性能要求,若纯靠技术手段实现。俺只能呵呵呵了
‘陆’ 现在有一sql数据库,500多万条记录,按名称模糊查询的时候速度很慢,
在名称这个字段上加上索引。这会大大的减少时间,
我昨天坐的一个测试,500万记录 查询需要60秒左右,加索引后只要5秒
如果是第一次查询的时候,它需要占用大量的内存,当内存大小不变时,才开始执行,所以需要一定的时间。
‘柒’ sql语句查询上万条数据。
用NOT IN 是很慢的一种查询方式。
试试用Join。
select a.*, 'N' as chk from pay a
where a.txn_dt = '20090110'
and txn_sta_cd = '6'
union
select * from (
select b.*, isnull(c.txn_user_id,'N') as chk
from pay b left outer join pay c
on b.txn_user_id = c.txn_user_id
and b.txn_dt = c.txn_dt
and b.txn_sta_cd = '7'
and c.txn_sta_cd = '6'
where b.txn_dt = '20090110' ) d
where d.chk = 'N'
=========================================
如果不行, 试试下面的
select a.*, 'N' as chk
from pay a
where a.txn_dt = '20090110'
and a.txn_sta_cd = '6'
union
select * from (
select b.*, isnull(c.txn_user_id,'N') as chk
from
(select * from pay
where txn_dt='20090110'
and txn_sta_cd = '7') b left outer join
(select * from pay
where txn_dt='20090110'
and txn_sta_cd = '7') c
on b.txn_user_id = c.txn_user_id) d
where d.chk = 'N'
强烈要求补分~~~!!!!!!!
‘捌’ SQL 如果 TOP 值 大于表的总数据会不会影响查询速度
在一百万的数据量下测试,发现两种方法的效率相同。
declare @i int
set @i = 1
while @i <= 1000000
begin
insert into MytestTable values(@i,'test')
set @i = @i+1
end
select top 1000001 * from dbo.MytestTable
select * from MytestTable
在我的机器上,查询都是用了7秒钟
-----------------------------
你不加order by不就完了?
order by应该不会提高效率的,微软的机制是这样的,先把所需要的数据查询出来,然后再对相应字段进行排序。所以排序这个过程需要对相应字段进行遍历扫描,需要时间的。
--------------------------
select top 200 * from (select * from user where isdel=0 and istop = 1) as U
where level in (2,5,8) and username like '%哈哈%'
order by U.update desc