代码改变世界

随笔分类 -  00.SQL Server

使用SQL Server 扩展函数进行性能优化

2010-05-26 21:55 by 听风吹雨, 5197 阅读, 收藏, 编辑
摘要: SQL Server2005扩展函数已经不是一件什么新鲜的事了,但是我看网上的大部分都是说聚合函数,例子也比较浅,那么这里就讲讲我运用扩展函数来优化数据库性能的例子,希望和大家一起分享这个经验。如果你还不知道什么是SQLCLR,那么你可以参考:SQL Server扩展函数的基本概念。需求说明大家在使用SQL Server开发的时候一定会遇到这样的需求,那就是通过Table_Name1表的两个字段Column1、Column2来查询在Table_Name2表中符合这两个条件的记录 阅读全文

SQL Server扩展函数的基本概念

2010-05-26 19:57 by 听风吹雨, 4234 阅读, 收藏, 编辑
摘要: 什么是SQL Server扩展函数呢?它实际上就是把C#或VB.NET的代码拿到SQL Server上去执行。反过来思考,那就是当你想对表数据进行比较复杂的逻辑处理时,写SQL又太麻烦,那么你就可以是否可以通过SQLCLR来解决这个问题了。下面是我摘自wikipedia对SQLCLR的解释。SQL CLR(SQL Common Language Runtime) 是自 SQL Server 2005 才出现的新功能,它将.NET Framework中的CLR服务注入到 SQL Server 中,让 SQL Server 阅读全文

SQL Server 全文索引的硬伤

2010-05-13 21:10 by 听风吹雨, 25093 阅读, 收藏, 编辑
摘要: 本文关键字:SQL Server全文索引、CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE等谓词。想象这样一个场景:在DataBase_name.dbo.Table_name中有一个名为Title(标题)和Contents(内容)的字段,现在需要查询在Title或者Contents中包括“qq”字符的所有记录。面对这样的一个场景,我们通常都会写这样一个脚本:SELECT * FROM DataBase_name.dbo.Table_name WHERE Title LIKE '%qq%' OR Contents LIKE '%q 阅读全文

简单实用SQL脚本Part2:日期和时间函数

2010-04-21 18:25 by 听风吹雨, 2913 阅读, 收藏, 编辑
摘要: 一、SQL Server 日期函数集合Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->--参考http://msdn.microsoft.com/zh-cn/library/ms186724.aspx--1:获取系统日期和时间值函数--getdate()SELECTGETDATE()AS'today'--getutcdate()SELECTGETUTCDATE()AS'today'--2:修改日期和时间值函数- 阅读全文

SQL Server 使用bcp进行大数据量导出导入

2010-04-17 20:03 by 听风吹雨, 11410 阅读, 收藏, 编辑
摘要: SQL Server的导出导入方式有:在SQL Server中提供了导入导出的界面操作。在界面操作中又分【复制一个或多个表或视图的数据】和【编写查询以指定要传输的数据】两种模式,第一种是直接对表、视图进行全部字段、记录进行导出,而第二种就是可以通过SQL语句来控制导出导入的字段和行。使用 简单但有用的SQL脚本 中的【表复制】这里面的方法。 再一种就是在命令行中使用bcp命令来导入导出数据,需要特别说明的是,这是对大数据量导入导出就好的办法。下面是我实践出来可以使用的脚本,但是我在使用bcp的时候遇到了一些问题,希望大家给于帮助。谢谢。(PS:问题在下面代码中)使用xp_cmdshel... 阅读全文

使用Excel批量生成SQL脚本(小技巧)

2010-04-15 14:18 by 听风吹雨, 26265 阅读, 收藏, 编辑
摘要: 需求: 我们需要把Excel中的一些资料更新到数据库表中,比如学生的考试系统,在数据中已经有了考生的ID,这里有一份考生ID和考生成绩的Excel表,我们如何把考生成绩更新到数据库表中呢?方案:我们最常使用的做法就是把这个Excel表导入到数据库中,在使用update语句来更新表。没错,这就是我通常使用的方法,但是有些人他们不安常理出牌,有时候客户说:我只会执行SQL,我不知道怎么把Excel导入到数据库中。这个时候我们如何把要更新的内容生产SQL语句给到客户呢?如何是一两条记录,我们手动写SQL就可以了,但是如果有几百个学生,我们要手动写几百条语句吗?是否有批量生成SQL脚本的方法?这就是. 阅读全文

简单实用SQL脚本

2010-04-09 18:32 by 听风吹雨, 46886 阅读, 收藏, 编辑
摘要: 行列互转Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ createtabletest(idint,namevarchar(20),quarterint,profileint)insertintotestvalues(1,'a',1,1000) insertintotestvalues(1,'a',2,2000)insertintotestvalues(1,'a',3,4000)insertint 阅读全文

SQL Server 空间换时间的数据库设计

2010-03-30 11:45 by 听风吹雨, 5626 阅读, 收藏, 编辑
摘要: 我们的系统中很常会用到SMS、Email等的发送,在我们的设计中通常会创建一个Tb_outbox表,当产生数据时,插入到Tb_outbox表,由定时器去读取Tb_outbox的数据进行发送,发送完了再修改Tb_outbox的发送状态。是的,这就是通常的做法,但是当我们的SMS、Email的发送频率和数量足够大的时候,我们的系统就会出现性能、表被锁等问题。那我们如何是好呢? 下面的设计的一个思想就是如标题所述:空间换时间。就个人而言,我感觉这个描述更加贴切:对象的职责分离,把Insert、U 阅读全文

肤浅的 SQL Server 2000、2005对比

2010-03-16 15:28 by 听风吹雨, 2047 阅读, 收藏, 编辑
摘要: 使用过2000和2005的童鞋对它们的不同一定有一定的看法,而且网上也有很多的资料,特别是官方网站上,SQL Server 2005 Beta 2 Transact-SQL 增强功能,但是今天就让我这个浅薄的人来讲讲它们之间肤浅的不同吧。界 面风格2000的界面比较低调、暗淡;2005的界面比较圆滑一点,一个很重要的成功 点,就是字体使用了【微软雅黑】,呵呵; 操作2000 有一个企业管理器、一... 阅读全文

SQL Server 索引中include的魅力(具有包含性列的索引)

2010-01-11 20:44 by 听风吹雨, 43199 阅读, 收藏, 编辑
摘要: 开文之前首先要讲讲几个概念 【覆盖查询】 当索引包含查询引用的所有列时,它通常称为“覆盖查询”。 【索引覆盖】 如果返回的数据列就包含于索引的键值中,或者包含于索引的键值+聚集索引的键值中,那么就不会发生Bookup Lookup,因为找到索引项,就已经找到所需的数据了,没有必要再到数据行去找了。这种情况,叫做索引覆盖; 【复合索引】 和复合索引相对的就是单一索引了,就是索引只包含一个字段,所以复合索引就是包含两个或者多个字段的索引 阅读全文

数据库调优积累系列(6):读书笔记

2009-12-28 20:05 by 听风吹雨, 2009 阅读, 收藏, 编辑
摘要: 【揭秘SQL Server 2000中的Bookmark Lookup】:http://www.cnblogs.com/Yahong111/archive/2007/09/13/891641.html 起因 在执行计划中看到了Bookmark Lookup操作符,于是就上网去逛逛,最后发现这篇牛文; 主要内容摘要 非聚集索引有一个与聚集索引中相似的B树索引结构,但是他对数据行的顺序不起作用,... 阅读全文

数据库调优积累系列(5):专业术语

2009-12-28 20:04 by 听风吹雨, 646 阅读, 收藏, 编辑
摘要: 性能调优 测试基线 测试用例,测试场景 聚集索引、非聚集索引 索引覆盖 复合索引、组合索引、单一索引、哈希索引 高选择性 计划缓存、执行计划、编译、重编译 缓存命中率 查询计划(编译-优化-执行) 查询优化器、查询执行引擎 物理操作符、逻辑操作符 行定位器 谓词 填充因子 Index Seek(索引查找)、Index Scan(索引扫描)、Bookmark Looku... 阅读全文

数据库调优积累系列(4):数据库设计

2009-12-28 20:02 by 听风吹雨, 731 阅读, 收藏, 编辑
摘要: 数据库设计 如果某表经常出现死锁,那就要做对象职责分离,就是把插入、更新、删除等分离;在设计或创建表的时候,我们往往会把Id字段设置为聚集索引,但是我们这样的习惯可能不是最优的,因为聚集索引和非聚集索引的区别就是一个是物理存储的,所以在查询的时候如果使用聚集索引的话,可能会比非聚集索引要开,因为关系到数据页的分布,因此我们有时可以根据我们的需要来设置聚集索引,比如待办待阅一般都是按照时间来倒排的,... 阅读全文

数据库调优积累系列(2):查询

2009-12-28 19:49 by 听风吹雨, 898 阅读, 收藏, 编辑
摘要: SQL Server 查询 查询的时候应该尽量按照复合索引中的顺序来做条件查询;(比如IXC中spInterActiveInstance_GetByIDToStat条件and ProcessState<>99的位置); 如果在程序中有For或者是Foreach,在存储过程中又有IF Exists,那就要看是否可以在表中加入复合索引了,IF Not Exists可以转换为IF Ex... 阅读全文

数据库调优积累系列(3):游标

2009-12-28 19:49 by 听风吹雨, 569 阅读, 收藏, 编辑
摘要: 游标 尽量少用游标,如果不得不用,那就要看是否可以对逻辑进行整合,分出不同的情况,让在一部分情况是使用insert select的方式来一次性插入;(注意下例中的业务分析,这个是关键); 如果存储过程花费的时间比较长,而且无法避免使用游标,那我们就要分析系统的业务,看大部分的情况是走那条路的,那我们对大部分会发生的事做优化,也是可以达到我们优化的目的的;(比如IXC发起时候在insert到tb... 阅读全文

数据库调优积累系列(1):索引

2009-12-28 19:47 by 听风吹雨, 1140 阅读, 收藏, 编辑
摘要: 索引 复合索引(where A And B)如果没有对A和B做单一索引,查询的时间为a;如果对A做单一索引,查询时间为b;如果对B做单一索引,查询时间为c;如果对A、B做复合索引,查询的时间为d,那时间的比较就应该是a>b=c>d;(比如spMsgReader_Distribute中使用WHERE InfoID=@infoID AND UserID=@userID,插入7000次的... 阅读全文