关于SQL Server的优化
如何优化SQL Server
1、 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的 操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符 如SELECT * from T1语句,要用到几列就选择几列如:SELECT COL1,COL2 from T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 from T1,因为某些情况下用户是不需要那么多的数据的。不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开 销;按照特定顺序提取数据的查找。
2、 避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如:
SELECT name from employee WHERE salary > 60000
在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。
3、 尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
SELECT * from T1 WHERE F1/2=100
应改为:
SELECT * from T1 WHERE F1=100*2
SELECT * from RECORD WHERE SUBSTRING(CARD_NO,1,4)=’5378’
应改为:
SELECT * from RECORD WHERE CARD_NO LIKE ‘5378%’
SELECT member_number, first_name, last_name from members
WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21
应改为:
SELECT member_number, first_name, last_name from members
WHERE dateofbirth < DATEADD(yy,-21,GETDATE())
即:任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
4、 避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操作符,因为这会使系统无法使用索引,而只能直接搜索表中的数据。例如:
SELECT id from employee WHERE id != 'B%'
优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。
5、 尽量使用数字型字段,一部分开发人员和数据库管理人
相关文档:
ROW_NUMBER 返回按一定规则排序的当前记录对应的行号
比如我们有这样一个应用场景:
现在有个比赛,需要从网上参赛者从从网络上报名,然后去最早报名的5个人参加比赛,为此我们实现如下:
1.为此我们要建立一张表来保存报名参赛者的姓名及起报名时间
CREATE
TABLE [dbo].[UserEnroll](
[UserName] [nvarchar] ......
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说 ......
-- 查看当前db的登陆
select * from sys.sql_logins
-- 查看性能记数器
SELECT * from sys.dm_os_performance_counters
-- 执行过的线程所遇到的所有等待(不是当前正在运行的线程, 为自上次重置统计信息或启动服务器以来累积的数据),可分析靠前的几个等待较高的事件。
select * from sys.dm_os_wait_stats order by wa ......
给大家个学习数据库的软件吧,sql server 2008,这个是微软公司的作品,不错,应该是非常不错,在电脑上安装Oracle数据库的话,那个比较大,而且在网上也不好下载,要是连接到学校服务器的话,也是不可能的,除非大家经常去机房上机,但是那个也不开,废话不多说了,大家去微软官网下载一个sql server 2008的试用版的安装文 ......