2000W数据的查询太慢了,求解决方法
最近很火的数据库搞到了。不过I3、4G的机器表示跑SQL语句压力太大,各位有什么办法么??
例如:
select COUNT(CtfId) from cdsgus
就要接近3分钟。
最后把表结构给贴出来:
SELECT TOP 1000 [Name]
,[CardNo]
,[Descriot]
,[CtfTp]
,[CtfId]
,[Gender]
,[Birthday]
,[Address]
,[Zip]
,[Dirty]
,[District1]
,[District2]
,[District3]
,[District4]
,[District5]
,[District6]
,[FirstNm]
,[LastNm]
,[Duty]
,[Mobile]
,[Tel]
,[Fax]
,[EMail]
,[Nation]
,[Taste]
,[Education]
,[Company]
,[CTel]
,[CAddress]
,[CZip]
,[Family]
,[Version]
,[id]
FROM [testdb].[dbo].[cdsgus]
最后再来个截图(带码的):
------解决方案--------------------建议你在你查询条件字段上建立索引,这样查询速度就快多了
------解决方案--------------------首先这种全表扫描快不了,然后,如果ctfid不重复,可以用这个语句来查询总数:
SELECT rowcnt FROM sys.sysindexes WHERE id=OBJECT_ID('cdsgus') AND indid=0
------解决方案--------------------address有索引的话就差不多了,但是有筛选条件的话不能用我那个语句,我那个是统计表上的数量用的
------解决方案--------------------全表查,索引没什么用的,where条件上有索引就“可能”有效
------解决方案--------------------再说明一下,全表扫描即使硬件很牛,也不会有明显的效果,要提高速度,还是要靠控制数据量比如加where条件等方法。或者借助其他第三方工具,或者非实时统计的前提下,定期预先统计并保存起来,获取一个大概值
------解决方案--------------------这种情况,主要是建索引哈,我之前公司的表数据接近1.5亿条,加了索引,select count(*) 也就几秒就出来了哈。
由于原来公司的查询语句非常复杂,不过不建索引,估计查1个小时,也查询不出来。
另外,比如你用address作为查询条件,一般就对address列建一个索引,能明显提高查询速度。
升级硬件的话,主要是加内存,和多加几个硬盘。
------解决方案--------------------通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍
http://blog.csdn.net/yupeigu/article/details/12646371
------解决方案--------------------count(*)是直接取统计信息