|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
优化的SQL查询算法,有效地提高查询速度server|sqlserver|数据
2月份曾写过一篇sqlserver优化海量查询的办法http://blog.csdn.net/great_domino/archive/2005/02/01/275839.aspx
比来有同事碰到sqlserver统计记百万条以上纪录条数太慢的成绩,sp常常会碰到统计大批数据成绩,也许是偶合的缘故原由,找到一个很复杂的办法!
写了一篇文章
我们在统计纪录的时分一般的做法是:selectcount(*)ascfromtable。但是关于纪录数伟大的表,上述做法将会十分耗时。在DELL4400服务器上做实验,MSSqlserver2000数据库关于100万纪录的复杂数据表实行上述语句,工夫在1分钟以上。假如在表的某个字段上做聚簇索引,第一次实行该语句的工夫和没有索引的工夫差未几,以后实行上述语句,速率很快,在1秒中之内,但当表的纪录数产生较年夜变更后,再实行该语句又会履历一次耗时的历程。并且不是每一个表都合适做聚簇索引的,关于数目伟大的表,假如必要常常增删操纵,建聚簇索引是一个很不明智的做法,将会极年夜的影响增删的速率。那末有无一个对照复杂的办法疾速猎取表的纪录总数呢?谜底是有的。在MSSQL数据库中每一个表都在sysindexes体系表中具有最少一笔记录,该纪录中的rows字段会准时纪录表的纪录总数。上面是sysindexes表的相干纪录的寄义:
列名数据范例形貌idint表ID(假如indid=0或255)。不然为索引所属表的IDIndidsmallint索引ID:0=表1=聚簇索引>1=非聚簇索引255=具有text或image数据的表条目。rowsint基于indid=0和indid=1地数据级行数,该值关于indid>1重复。假如indid=255,rows设置为0。当表没有聚簇索引时,Indid=0不然为1。
mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。 |
|