今天有位网友找我给他原有的系统数据库优化下查询速度,个人总结了几点对sqlserver的优化
1、Sql查询语句的优化,如:能使用外连接查询出来的尽量别用内连接...,这些个就不废话,如果我使用这个给他优化的话,那我就还得先了解他系统的业务什么的,花的时间就比较多了,这样不值。所以打算通过以下2点来优化:
2、为表添加索引,这个根据系统实际情况来
3、在系统测试通过后,将外键约束删除(由于他是已经在运行的系统,如果没有使用外键来执行一些触发器什么的,这个肯定行得通的)
通过sql可以查询出指定的表的外键名称,eg.查询db中SalesOrder表中的外键
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id(‘[dbo].[SalesOrder]‘)
这样就可以看到SalesOrder表中的外键了(如果有)
但如果这样的话,那我不得每个表去查询,google了下找到一个解决方案,用一条sql语句搞定全部,如下:
--使用SYSREFERENCES --删除外键 DECLARE @SQL VARCHAR(100) DECLARE CUR_FK CURSOR LOCAL FOR SELECT ‘ALTER TABLE [‘+ OBJECT_NAME(FKEYID) + ‘] drop constraint ‘ + OBJECT_NAME(CONSTID) FROM SYSREFERENCES --删除所有外键 OPEN CUR_FK FETCH CUR_FK INTO @SQL WHILE @@FETCH_STATUS =0 BEGIN EXEC(@SQL) FETCH CUR_FK INTO @SQL END CLOSE CUR_FK DEALLOCATE CUR_FK
直接执行这个,会将db中所有的外键约束删除