SQL SERVER性能优化综述
--原著:Haiwer
近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化相关的注意事项,在网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而非或者过时(可能对SQL SERVER6.5以前的版本或者ORACLE是适用的)的信息,只好自己根据以前的经验和测试结果进行总结了。
我始终认为,一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。
一、 分析阶段
一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。最好能有各种需求的量化的指标。
另一方面,在分析阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和 ......
--日期转换参数,值得收藏
select CONVERT(varchar, getdate(), 120)
2004-09-12 11:06:08
select convert(varchar(10),getdate() ,120)
----------
2009-04-09
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
20040912110608
select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12
select CONVERT(varchar(12) , getdate(), 112 )
20040912
select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12
其它我不常用的日期格式转换方法:
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-1 ......
转自:http://blog.csdn.net/oceanrain/archive/2006/09/26/1289188.aspx
本文主要介绍通过SQL Server2005连接Excel和Access,然后访问Excel工作簿中的内容及Access本地数据库中的表内容的方法:
一.SQL Server2005如何访问Excel文件中的数据?
1.运行"开始 \ 程序 \ Microsoft SQL Server 2005 \ SQL Server Management Studio",在打开的窗口中选择左侧对象资源管理器下的"<数据库实例名>\服务器对象\链接服务器"结点.
2.鼠标右键单击"链接服务器"结点,在弹出的菜单中选择"新建链接服务器"菜单,在打开的"新建链接服务器"对话框进行如下配置:
链接服务器(N)-------->Excel 注:此名称根据个人爱好随便填写
访问接口(P)------------>Microsoft Jet 4.0 OLE DB Provider
产口名称(U)------------>Excel
数据源(D)---------------->F:\Excel文件集合\成本.xls 注:excel文件所在的路径
访问接口字符串-------->Excel 8.0
设置完成后单击"确定"按钮进行保存操作.
3.通过 ......
在我们进行sql注入的过程中常常会用到union查询方法,大多数情况下使用union查询法可以让我们很快的知道目标的数据组织方式。然而当我们遇到ntext、text或image数据类型时,union查询就不太管用了。以sql server为例,在这种情况下会抛出如下错误:ntext 数据类型不能选为 DISTINCT,因为它不可比。
这里,我以sql server数据库为测试环境来进行分析。因为ntext、text、image数据字段可能存储非常多的数据,默认的情况下,数据库为提高效率会强制排除以上类型的字段中的相同的数据,这样就相当于在sql查询语句中加入了distinct关键字。而又因为这种类型的数据量可能非常大,数据库无法对这种类型的字段进行有效的比较,而distinct又要求数据库进行数据比较,从而导致带有unionr的sql语句执行错误,造成上述现象。
了解了出错的原理我们就可以在执等的sql语句中加入相应的条件来使sql能正确执行。从上面可以看出,sql语句无法执行的原因是因为数据库去检查union的数据是否相同,那么我们只需要去掉这个默认的条件就可以了。解决的方法就是在union关键字后边加上“all”关键字。
&nbs ......
1. 使用%TYPE
在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:
DECLARE
v_FirstName VARCHAR2(20);
但是如果first_name列的定义改变了会发生什么(比如说表改变了,first_name现在的类型变为VARCHAR2(25))?那就会导致
所有使用这个列的PL/SQL代码都必须进行修改。如果你有很多的PL/SQL代码,这种处理可能是十分耗时和容易出错的。
这时,你可以使用”%TYPE”属性而不是将变量类型硬性编码。
例如:
DECLARE
v_FirstName students.first_name%TYPE;
通过使用%TYPE,v_FirstName变量将同students表的first_name列的类型相同(可以理解为将两者邦定起来)。
每次匿名块或命名块运行该语句块以及编译存储对象(过程、函数、包、对象类和触发器)时,就会确定该类型。
使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。
2. 使用%ROWTYPE
2.1 PL/SQL记录
PL/SQL记录类型类似于C语 ......
1. 使用%TYPE
在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:
DECLARE
v_FirstName VARCHAR2(20);
但是如果first_name列的定义改变了会发生什么(比如说表改变了,first_name现在的类型变为VARCHAR2(25))?那就会导致
所有使用这个列的PL/SQL代码都必须进行修改。如果你有很多的PL/SQL代码,这种处理可能是十分耗时和容易出错的。
这时,你可以使用”%TYPE”属性而不是将变量类型硬性编码。
例如:
DECLARE
v_FirstName students.first_name%TYPE;
通过使用%TYPE,v_FirstName变量将同students表的first_name列的类型相同(可以理解为将两者邦定起来)。
每次匿名块或命名块运行该语句块以及编译存储对象(过程、函数、包、对象类和触发器)时,就会确定该类型。
使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。
2. 使用%ROWTYPE
2.1 PL/SQL记录
PL/SQL记录类型类似于C语 ......
ACCESS数据库
1:CodeSmith选中链接类型是:ADOXSchema
2:无密码的Access链接为:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb;
3:有密码的Access链接:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb;
Jet OLEDB:Database Password=1111
Sql数据库
server=192.1.1.14;User ID=test;Password=test;database=test;
Pooling=TRUE;Max Pool Size=1000;Connection Reset=FALSE
Oracle数据库
1:下载提供的ORACAL 驱动
2:Data Source=192.1.1.14;Data Source=test;Password=test;User ID=test
MySql数据库
server=127.0.0.1;User ID=root;Password=......;database=myProject; ......
ACCESS数据库
1:CodeSmith选中链接类型是:ADOXSchema
2:无密码的Access链接为:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb;
3:有密码的Access链接:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb;
Jet OLEDB:Database Password=1111
Sql数据库
server=192.1.1.14;User ID=test;Password=test;database=test;
Pooling=TRUE;Max Pool Size=1000;Connection Reset=FALSE
Oracle数据库
1:下载提供的ORACAL 驱动
2:Data Source=192.1.1.14;Data Source=test;Password=test;User ID=test
MySql数据库
server=127.0.0.1;User ID=root;Password=......;database=myProject; ......
ACCESS数据库
1:CodeSmith选中链接类型是:ADOXSchema
2:无密码的Access链接为:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb;
3:有密码的Access链接:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb;
Jet OLEDB:Database Password=1111
Sql数据库
server=192.1.1.14;User ID=test;Password=test;database=test;
Pooling=TRUE;Max Pool Size=1000;Connection Reset=FALSE
Oracle数据库
1:下载提供的ORACAL 驱动
2:Data Source=192.1.1.14;Data Source=test;Password=test;User ID=test
MySql数据库
server=127.0.0.1;User ID=root;Password=......;database=myProject; ......