这两天在搞一个超大规模的数据库, 这个超大指的是亿级(大概四亿左右的数据).
速度慢得让人吐血...
没办法,时间紧,只好想方设法的改进查询的效率.
首要当然是建索引,问题是建群集索引需要大量的磁盘空间,我这里没有,只好建一般索引. 为了使Where子句能够充分利用索引,凡是在where子句中使用的数据字段都建了索引. 好在不需要再执行Insert, Update等,不然真的要疯了. 不过我在where中还用了一些函数, 可能会导致表扫描. 没办法--应该说没有什么更好的办法.
对全表进行数据规整, 不符合要求的数据一律移走,尽量减少在Where子句中进行的判断.
因为一些特殊要求, 我还在SP中用了游标. 以前在SP中,游标是动态的从全数据库中选择生成. 虽然游标遍历的数据不多,但是还是很慢. 后来干脆把这些需要用来做游标的数据从数据库中提取出来单独建表,在游标取的时候直接从这些小表里面取,节省了一点点时间.
后来检查SQL Server,发现CPU和内存利用都还正常,这么慢估计是磁盘IO的问题. 妈的现在CPU和内存的技术突飞猛进,就是磁盘技术停滞不前. 用这些表都要消耗磁盘IO(包括临时表),后来想反正内存还有多的,于是在SP改用表变量,把对临时表的操作都改到内存中来.
posted on 2006-06-07 21:03
孙青霞 阅读(590)
评论(0) 编辑 收藏 引用