日期:2014-05-17  浏览次数:20767 次

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]


最后再来个截图(带码的):
2000万 sql语句 速度慢 数据库 查询

------解决方案--------------------
建议你在你查询条件字段上建立索引,这样查询速度就快多了
------解决方案--------------------
首先这种全表扫描快不了,然后,如果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(*)是直接取统计信息