当前位置:  数据库>sqlserver
本页文章导读:
    ▪SQL查询优化      SQL查询优化很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:  select * from table1 where name='zhangsan' and tID > 10000  和执行: &n.........
    ▪MSSQL 2005/2008 日志压缩清理      MSSQL 2005和MSSQL 2008删除或压缩数据库日志(摘自网络) 适用于SQL Server 2005的方法Backup Log DNName WITH no_logGODUMP TRANSACTION DNName WITH no_logGOUSE DNNameDBCC SHRINKFILE (2)GO 适用于SQL Server 2008的方法USE [mas.........
    ▪PowerDesigner初体验      PowerDesigner简介工具的用途 :这里我只介绍他在SqlServer数据库的应用,其它的我也不懂。工具的好处 : 个人体会理解,图视化数据库设计,更直观简单的设计,更便于分析数据库逻辑关系.........

[1]SQL查询优化
    来源:    发布时间: 2013-10-15

SQL查询优化

很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:  

select * from table1 where name='zhangsan' and tID > 10000  

和执行:  

select * from table1 where tID > 10000 and name='zhangsan'  

一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个name='zhangsan'的,而后再根据限制条件条件tID>10000来提出查询结果。  

事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。  

虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。  

在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。  

SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:  

列名 操作符 <常数 或 变量>  

或  

<常数 或 变量> 操作符列名  

列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:  

Name=’张三’  

价格>5000  

5000<价格  

Name=’张三’ and 价格>5000  

如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的。  

介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:  

1、Like语句是否属于SARG取决于所使用的通配符的类型 

如:name like ‘张%’ ,这就属于SARG  

而:name like ‘%张’ ,就不属于SARG。  

原因是通配符%在字符串的开通使得索引无法使用。  

2、or 会引起全表扫描 

Name=’张三’ and 价格>5000 符号SARG,而:Name=’张三’ or 价格>5000 则不符合SARG。使用or会引起全表扫描。  

3、非操作符、函数引起的不满足SARG形式的语句 

不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子:  

ABS(价格)<5000  

Name like ‘%三’  

有些表达式,如:  

WHERE 价格*2>5000  

SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为:  

WHERE 价格>2500/2  

但我们不推荐这样使用,因为有时SQL SERVER不能保证这种转化与原始表达式是完全等价的。  

4、IN 的作用相当与OR 

语句:  

Select * from table1 where tid in (2,3)  

和  

Select * from table1 where tid=2 or tid=3  

是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。  

5、尽量少用NOT 

6、exists 和 in 的执行效率是一样的 

很多资料上都显示说,exists要比in的执行效率要高,同时应尽可能的用not exists来代替not in。但事实上,我试验了一下,发现二者无论是前面带不带not,二者之间的执行效率都是一样的。因为涉及子查询,我们试验这次用SQL SERVER自带的pubs数据库。运行前我们可以把SQL SERVER的statistics I/O状态打开。  

(1)select title,price from titles where title_id in (select title_id from sales where qty>30)  

该句的执行结果为:  

表 'sales'。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。  

表 'titles'。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。  

(2)select title,price from titles where exists (select * from sales where sales.title_id=titles.title_id and qty>30)  

第二句的执行结果为:  

表 'sales'。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。  

表 'titles'。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。  

我们从此可以看到用exists和用in的执行效率是一样的。  

7、用函数charindex()和前面加通配符%的LIKE执行效率一样 

前面,我们谈到,如果在LIKE前面加上通配符%,那么将会引起全表扫描,所以其执行效率是低下的。但有的资料介绍说,用函数charindex()来代替LIKE速度会有大的提升,经我试验,发现这种说明也是错误的:  

select gid,title,fariqi,reader from tgongwen where charindex('刑侦支队',reader)>0 and fariqi>'2004-5-5'  

用时:7秒,另外:扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。  

select gid,title,fariqi,reader from tgongwen where reader like '%' + '刑侦支队' + '%' and fariqi>'2004-5-5'  

用时:7秒,另外:扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。  

8、union并不绝对比or的执行效率高 

我们前面已经谈到了在where子句中使用or会引起全表扫描,一般的,我所见过的资料都是推荐这里用union来代替or。事实证明,这种说法对于大部分都是适用的。  

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16' or gid>9990000  

用时:68秒。扫描计数 1,逻辑读 404008 次,物理读 283 次,预读 392163 次。  

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16'  

union  

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid>9990000  

用时:9秒。扫描计数 8,逻辑读 67489 次,物理读 216 次,预读 7499 次。  

看来,用union在通常情况下比用or的效率要高的多。  

但经过试验,笔者发现如果or两边的查询列是一样的话,那么用union则反倒和用or的执行速度差很多,虽然这里union扫描的是索引,而or扫描的是全表。  

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16' or fariqi='2004-2-5'  

用时:6423毫秒。扫描计数 2,逻辑读 14726 次,物理读 1 次,预读 7176 次。  

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16'  

union  

select gid,fariqi,neibuyonghu,reader,title f

    
[2]MSSQL 2005/2008 日志压缩清理
    来源:    发布时间: 2013-10-15
MSSQL 2005和MSSQL 2008删除或压缩数据库日志
(摘自网络)
 
适用于SQL Server 2005的方法
Backup Log DNName WITH no_log
GO
DUMP TRANSACTION DNName WITH no_log
GO
USE DNName
DBCC SHRINKFILE (2)
GO
 
适用于SQL Server 2008的方法
USE [master] 
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE   --简单模式
GO
USE DNName
GO
DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)
GO
USE [master] 
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL  --还原为完全模式
GO

本文链接


    
[3]PowerDesigner初体验
    来源:    发布时间: 2013-10-15

PowerDesigner简介

工具的用途 :这里我只介绍他在SqlServer数据库的应用,其它的我也不懂。

工具的好处 : 个人体会理解,图视化数据库设计,更直观简单的设计,更便于分析数据库逻辑关系,与数据库全局把控。

祈求:哪位大虾那里藏的有PowerDesigner更好更全的操作文章,希望能给我和不动这货的攻城师们留言分享下。

PowerDesigner的下载以及破解

一、下载

1、PowerDesigner 12.5官方下载地址

   http://download.sybase.com/eval/PowerDesigner/powerdesigner125_eval.exe (复制到浏览器或迅雷下载)

 大小125 MB (132,006,349 字节) 

二、破解

1、安装完成后,修改安装目录下的pdflm12.dll文件,使用 UEDIT32 二进制编辑器打开此文件,查找:83 C4 14 8B 85 E4 FE FF FF将此字符串改为83 C4 14 33 C0 90 90 90 90 并保存(win7或者vista需要更改文件夹权限方可保存)

2、制作license.lic文件

拷贝以下内容,并保存为license.lic文件(注意扩展名是lic)

FEATURE PD_SHELL SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=1

FEATURE PD_DEV   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=2

FEATURE PD_DA    SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=3

FEATURE PD_STU   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=4

FEATURE PD_DEVE SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=5

FEATURE PD_DAE   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=6

FEATURE PD_STUE SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=7

FEATURE PD_VW    SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=8

FEATURE PD_CDM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=9

FEATURE PD_XSM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=0

FEATURE PD_ILM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=1

FEATURE PD_RQM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=2

FEATURE PD_PDM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=3

FEATURE PD_OOM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=4

FEATURE PD_BPM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=5

FEATURE PD_RMG   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=6

FEATURE PD_FRM   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=7

FEATURE PD_RTP   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=8

FEATURE PD_MMR   SYBASE 12.50 permanent uncounted 1 TS_OK HOSTID=ANY SIGN2=9

3、导入授权文件

A、打开PD12.5,菜单Tools -> License Parameters..,显示License Management Wizard。单击[下一步] 

B、显示License Load窗口 

C、点击[Load],选择上面生成的license.lic文件,之后显示License Key。 

D、单击[下一步]显示选择语言窗口,选择PRC。   

F、点击[完成],系统提示授权配置成功更新!

PowerDesigner创建Sql表的演示

1、我先声明下,接下来的介绍中 PowerDesigner = pd

2、在SQL数据库中创建 Test_Test 数据库

3、打开 pd ,看到右上角file --> 点开 ,看到new --> 点开

4、  别忘了点确定

5、

6、双击Table_1后

7、上边等于表建好了,但没有字段,下边开始添加字段,还是上边的弹出框

8、字段说明是很重要的,必须标明,那么你就要双击字段列

9.点击应用,确定,然后这个表就创建完成了,下面我们该把这个表,插入你创建好的Test_Test数据库了,点击pd菜单栏的database--->configure connections...

10、然后确定,选择应该是倒数第二个,Sql Server, 然后

11、

12、然后,pd菜单,的Database--->GenerateDatabase

13、可能要配置链接然后一直点确认,点run,就ok了。

14、也就是见证奇迹的时刻,打开你的数据库,就能看到你在pd创建的user表跑了进来!!

 

15、加油!加油!一起加油!!

 

 

 

 

 

 

 

 

 

 

本文链接


    
最新技术文章:
▪Sql Server里删除数据表中重复记录的例子
▪如何查看SQLSERVER中某个查询用了多少TempDB空间...
▪在SQL Server中使用ISNULL执行空值判断查询
▪揭秘SQL Server 2014有哪些新特性(1)-内存数据库
▪揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buff...
▪揭秘SQL Server 2014有哪些新特性(3)-可更新列存...
▪揭秘SQL Server 2014有哪些新特性(4)-原生备份加...
▪解决SqlServer 各版本 sa帐户不能登录问题
▪浅析SQL Server中包含事务的存储过程
▪深入分析MSSQL数据库中事务隔离级别和锁机制
▪SQL优化技巧指南
▪人工智能自动sql优化工具--SQLTuning for SQL Server
▪使用 TOP 子句限制UPDATE 语句更新的数据
▪sql server动态存储过程按日期保存数据示例
▪SQLServer用存储过程实现插入更新数据示例
▪SqlServer中tempdb的日志机制原理解析及示例分享...
▪SqlServer数据库提示 “tempdb” 的日志已满 问题...
▪浅谈tempdb在SqlServer系统中的重要作用
▪SqlServer提示“列前缀tempdb.无效: 未指定表名”...
▪SQL命令优化需要记住的9点事项
▪教你如何看懂SQL Server查询计划
▪sql server 2000数据库备份还原的图文教程
▪SqlServer2012中First_Value函数简单分析
▪sql语句中单引号嵌套问题(一定要避免直接嵌...
▪谈谈sqlserver自定义函数与存储过程的区别
▪SQL SERVER使用REPLACE将某一列字段中的某个值替...
▪总结一周内学习的Sql经验(一)
▪sql存储过程详解
▪SQL Server UPDATE语句的用法详解
▪MSSQL事务的存储过程
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3