摘要:
相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。 对于这个问题,以下给出几个解决方案,各位客观可斟酌后选择。一、邻接表:依... 阅读全文
摘要:
相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。 对于这个问题,以下给出几个解决方案,各位客观可斟酌后选择。一、邻接表:依... 阅读全文
摘要:
有一些开发人员不推荐使用完整性约束,你可能听过以下这么几点不使用外键的原因。 1、数据更新有可能和约束冲突。 2、当前的数据库设计如此灵活,以致于不支持引用完整性约束。 3、数据库为外键建立的索引会影响性能。 4、当前使用的数据库不支持外键。 5、定义外键的语法并不简单,还需要查阅。一... 阅读全文
摘要:
本文的目标就是要确认那些使用了主键,却混淆了主键的本质而造成的一种反模式。一、确立主键规范 每个了解数据库设计的人都知道,主键对于一张表来说是一个很重要,甚至必需的部分。这确实是事实,主键是好的数据库设计的一部分。主键是数据库确保数据行在整张表唯一性的保障。它是定位到一条记录并且确保不会重复存... 阅读全文
摘要:
一、乱穿马路模式介绍 程序员通常使用逗号分隔的列表来避免在多对多关系中创建交叉表,这种设计方式定义为一种反模式,称为乱穿马路。 例如:在一个产品管理系统中,一个人可以有多个产品,一个产品必须对应一个人,因此有如下数据库: 但是,随着时间的推移,出现了一个产品可能会有多个联系人。于是为了最小... 阅读全文
摘要:
一、浮点类型简介 整型是一个很有用的数据类型,但只能存储整数,比如1、199、-19。但不能表述像2.5这样的浮点数。如果数据对精度要求很高,你需要使用另一种数据类型来取代整型。比如算钱的时候通常需要精确到小数点后两位,像$19.95。 在这里首先来介绍下SQLServer中的浮点数:浮点类型是... 阅读全文
摘要:
WCF下的序列化与反序列化解决的是数据在两种状态之间的相互转化:托管类型对象和XML。由于类型定义了对象的数据结构,所以无论对于序列化还是反序列化,都必须事先确定对象的类型。如果被序列化对象或者被反序列化生成的对象包含不可知的类型,序列化或者反序列化将会失败。为了确保DataContractSeri... 阅读全文
摘要:
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式。在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。 一、... 阅读全文
摘要:
/// /// 本地时间转成GMT时间 /// public static string ToGMTString(DateTime dt) { return dt.ToUniversalTime().ToString("r"); ... 阅读全文
摘要:
XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件。其实,在印象当中,XML很多的操作类都支持直接Save、Read也支持接受XmlReader与XmlWriter类的示例作为参数,但是为什么还要有这个两类来专门用于读写XML文件呢?因为它们有强大的自定义格式功能;... 阅读全文
摘要:
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程。反序列化则是从XML输出中重新创建原始状态的对象。XML序列化中最主要的类是XmlSerializer类。它的最重要的方法是Serialize和Deserialize方法,它位于System.Xml.Serializat... 阅读全文
摘要:
.Net框架下的System.Xml.XPath命名空间提供了一系列的类,允许你应用XPath数据模式查询和展示XML文档数据。一、XPath介绍 XPath有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释、根节点。二、XPath语法 XPath使用路径表达式来选取XML文档中的... 阅读全文
摘要:
验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema。本文主要介绍XML Schema。一、XML Schema的优点XML Schema基于XML,没有专门的语法。XML Schema可以像其他XML文件一样解析和处理。XML Schema支持一系列的数据类... 阅读全文
摘要:
一、XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现。 以下给出XML文档的组成部分对应.NET中的类:XML文档组成部分对应.net中的类处理指令XmlProcessingInstruction专指元素节点XmlElemen... 阅读全文
摘要:
一、XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据。XML文档以.xml为后缀。需要彻底注意的是XML是区分大小写的。 先从一个简单的XML例子来了解下xml基础: xml学习笔记 30 300 第一行表明,本XML遵守的版本是1.0,使用的字符编... 阅读全文
摘要:
1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90A: select distinct name from table where nam... 阅读全文
摘要:
计划缓冲的基本目的是通过重用执行计划来改进性能。因为,确认执行计划确实可重用很重要。因为即席查询的计划可重用性效率低下,所以一般建议尽可能依赖预定义工作负载技术。为了确保计划缓冲的高效实用,遵循以下建议。明确地参数化查询的可变部分;使用存储过程实现业务功能;使用sp_executesql避免存储... 阅读全文
摘要:
查询计划hash和查询hash 在SQL Server 2008中引入的围绕执行计划和缓冲的新功能被称为查询计划hash和查询hash。这是使用针对查询或查询计划的算法来生成二进制hash值的二进制对象。 可以从sys.dm_exec_query_stats或sys.dm_exec_reques... 阅读全文
摘要:
当查询被提交时,SQL Server检查过程缓冲中匹配的执行计划,如果没有找到,SQL Server执行查询编译和优化以生成新的执行计划。 如果执行计划存在于缓冲中,它在私有的执行上下文中重用,这节约了CPU的编译和优化周期。 具有不同过滤条件的相同查询提交到SQL Server时,如:SE... 阅读全文
摘要:
一、执行计划缓冲 优化器生成的执行计划保存在SQL Server内存池中的一个特别部分,被称为计划缓冲或过程缓冲。过程缓冲是SQL Server缓存的一部分。在缓冲中保存计划可使SQL Server避免在重新提交相同的查询时再次通过整个查询优化过程运行。SQL Server支持不同的技术,如:计划... 阅读全文
摘要:
SQL Server使用许多技术来优化资源消耗:基于语法的查询优化;无用计划匹配以避免对简单查询的深度优化;根据当前分布统计的索引和连接策略;多阶段的查询优化以控制优化开销;执行计划缓冲以避免重新生成执行计划; 以上技术按以下顺序执行:解析器;代数化器;查询优化器;执行计划生成,缓冲和hash... 阅读全文
摘要:
1、创建统计语法:CREATE STATISTICS statistics_name ON { table_or_indexed_view_name } ( column [ ,...n ] ) [ WHERE ] [ WITH [ [ FULLSCAN ... 阅读全文
摘要:
SQL Server允许用户手工地控制单独数据库中的统计维护。SQL Server的4个主要的控制紫铜统计的维护的配置如下:在无索引的列上新建统计(自动创建统计);更新现有统计(自动更新统计);用于收集统计的采样度;现有统计的异步更新(自动异步更新统计); 可以在数据库级别(所有表上的所有索引... 阅读全文
摘要:
统计是一组存储为柱状图的信息。柱状图是显示数据落入不通分类中的频率的一种统计结构。SQL Server存储的柱状图包括多大200行的列和索引键(或多列索引键的第一列)的数据分布采样。在两个连续采样值之间的索引键值范围上的信息被称为步骤。这些步骤由200个存储值之间的不通大小间隔组成。 一个步骤... 阅读全文
摘要:
非索引列上的统计 有时候,可能在连接或过滤条件中的列上没有索引。即使对这种非索引列,如果查询优化器知道这些列的数据分布(统计),它也很可能做出最佳的选择。 除了索引上的统计,SQL Server可以在没有索引的列上建立统计。即使不是索引列,当你开启了SQL Server自动创建统计功能,SQL ... 阅读全文
摘要:
一、索引在查询优化中的角色 SQL Server的查询优化器是基于开销的优化器、它通过确认选择性、数据的唯一性以及过滤数据(通过WHERE或JOIN子句)所使用的列来决定最佳的数据访问机制。统计与索引一同存在,但是它们也作为断言的一部分存在于没有索引的列上。 作为谓词引用的列中数据分布的最新信息... 阅读全文
摘要:
为了改进性能,分析重编译的起因很重要。往往,重编译可能并不需要,可以避免它以改进性能。了解导致重编译发生的不同条件有助于评估重编译的起因,并决定在重编译不必要时避免它的方法。 存储过程重编译在以下情况下发生:存储过程语句中引用的常规表、临时表或视图的架构变化。架构变化包括表的元数据或表上索引的... 阅读全文
摘要:
存储过程通过明确地将查询的可变部分转换为参数来增进执行计划的可重用性。这使执行计划在查询以可变部分的相同或不同值重新提交时可以被重用。存储过程包含一组复杂的SQL语句,使生成存储过程的执行计划的代价有些高。因此,通常重用存储过程的执行计划来代替生成新计划是有利的。但是,有时候现有的计划可能不适用... 阅读全文
摘要:
元数据函数 1、获取数据库标识符DB_ID DB_ID函数用于获取当前数据库的唯一ID(int数据类型),数据库ID用于服务器上唯一区分书库。 语法结构: DB_ID (['database_name']) 参数中的database_name是sysname类型的数据库名... 阅读全文
摘要:
数学函数 1、计算绝对值ABS ABS函数对一个数值表达式结果计算绝对值(bit数据类型除外),返回整数。 语法结构: ABS(数值表达式) 返回值:与数值表达式类型一致的数据 示例: SELECT ABS(-1) --输出 1 2、获取大于等于最小整数值Cel... 阅读全文
摘要:
文本和图像函数 1、查找特定字符串PATINDEX 语法与字符串的patindex一样。 2、获取文本指针TEXTPTR SQLServer在存储文本类型(ntext、text)和图像数据类型(image)时,默认情况是与常见的基本数据类型(如char、int等)这样的数据时单独... 阅读全文
摘要:
字符串函数 在开发T-SQL时,经常会需要对字符串进行各种各样的操作,下面介绍常用的字符串函数。 1、获取字符的ASCII码 ASCII ASCII码是对字符的标准编码。要获取字符的ASCII码就可以通过调用ASCII函数来实现。 语法结构: ASCII(espression) ... 阅读全文
摘要:
日期时间函数 1、获取当前日期GetDate getdate()函数以datetime数据类型的格式返回当前SQLServer服务器所在计算机的日期和时间。其语法格式为getdate()。返回值舍入到最近的秒小数部分,精度为.333秒数据库十七偏移量不包含在内。 示例: select ... 阅读全文
摘要:
聚合函数对一组值计算后返回单个值。除了count(统计项数)函数以外,其他的聚合函数在计算式都会忽略空值(null)。所有的聚合函数均为确定性函数。即任何时候使用一组相同的输入值调用聚合函数执行后的返回值都是相同的,无二义性。T-SQL提供的聚合函数一共有13个之多。 聚合函数通常会在下列场合... 阅读全文
摘要:
一、目标:编写SQL动态查询 SQL常常和程序代码一起使用。我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句。 string sql = SELECT * FROM Person WHERE Id = $Id 我们期望$Id是一个整型,因此当数据库接收到... 阅读全文
摘要:
一、目标:整理数据 有的人有强迫症,他们会为一系列数据的断档而抓狂。 一方面,Id为3这一行确实发生过一些事情,为什么这个查询不返回Id为3的这一行?这条记录数据丢失了吗?那个Column到底是什么?我要为这条数据的丢失负责吗?二、反模式:填充角落 大多数人对于断档的第一反应就是想要填补其... 阅读全文
摘要:
一、目标:恢复或重置密码 每个有密码的程序都会碰到用户忘记密码的情况,现今大多数程序都通过E-mail的回馈机制让用户恢复或者重置密码。这个解决方案有一个前提,这个服务有一个前提,就是这个用户能够访问他在注册时留下的邮箱。二、反模式:使用明文存储密码 在这种恢复密码的解决方案中,很常见的一个错误... 阅读全文
摘要:
一、目标:全文搜索 任何存储文本的应用都有针对这个文本进行单词或词组搜索的需求。我们使用数据库存储越来越多的文本数据,同时也需要搜索速度越来越快。Web应用尤其需要高性能和高扩展性数据库搜索技术。 SQL基本原理就是一列中的单个数据是原子性的。也就是说,当我们对两个值进行比较时,通常是把两个值当... 阅读全文
摘要:
一、减少输入 程序员都喜欢使用通配符,如: SELECT * FROM Person 又或者省略字段名: INSERT INTO Person VALUES('10','张飞'...)二、捷径会让你迷失方向 对于以上代码,如果你仅仅是在开发过程中用于查看一下数据库信息,又或者你只是写个... 阅读全文
摘要:
一、问题提出 随机数在数据库中是经常用到的系统。 例如,一个广告系统希望随机选择一个广告来显示。随机推荐相关文章等等。 在SQL Server中查找随机数最简单的方法为: SELECT TOP 1 * FROM Person ORDER BY NEWID() 以上SQL语句的执行计划如下... 阅读全文
摘要:
一、提出问题 不可避免地,我们都数据库总有一些字段是没有值的。不管是插入一个不完整的行,还是有些列可以合法地拥有一些无效值。SQL 支持一个特殊的空值,就是NULL。 在很多时候,NULL值导致我们的程序出现报错的现象,于是很多人就开始拒绝NULL值,想各种各样的方法来避免使用NULL值,但是很... 阅读全文
|