C军

不玩博客了!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 50 下一页

2013年10月23日

摘要: 一、索引视图基本概念 索引视图实际上是一种将一组唯一值“物化”为群集索引形式的视图,所为物化就是几乎和表一样,其数据也是会存储一份的(会占用硬盘空间,但是查询速度快,例如可以将count(),sum()等值设在索引视图中)。其优点是它在提取视图背后的信息方面提供了一个非常快的查找方法。在第一个索引(必须是针对一组唯一值的聚集索引)之后,通过使用来自第一个索引的聚集键作为参考点,SQL Server还能在视图上建立额外的索引。其限制如下:视图必须使用SCHEMABINDING选项;如果视图引用了任何用户自定义函数,那么这些函数也必须是模式绑定的;视图不可以引用任何其他的视图-只能引用表和UDF. 阅读全文
posted @ 2013-10-23 23:31 逆心 阅读(3336) 评论(0) 推荐(1) 编辑

摘要: 聚集索引、非聚集索引、非聚集唯一索引 我们都知道建立适当的索引能够提高查询速度,优化查询。先说明一下,无论是聚集索引还是非聚集索引都是B树结构。 聚集索引默认与主键相匹配,在设置主键时,SQL Server会默认在主键列创建聚集索引。但是可以手动更改为在任意一个列创建聚集索引,然后在另一个字段或多个字段上定义主键。这时主键将会被作为一个唯一的非聚集索引(唯一索引)被创建。通过指定NONCLUSTERED关键字就可以做到。CREATE TABLE MyTableKeyExample{ Column1 int IDENTITY KEY NONCLUSTERED, Column2 int ... 阅读全文
posted @ 2013-10-23 18:22 逆心 阅读(1802) 评论(0) 推荐(1) 编辑

摘要: 一、非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此。 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向新的数据页面,而不是更新所有相关非聚集索引的行定位器。这样,虽然降低了非聚集索引的维护开销,但是增加了从非聚集索引行到数据行的导航开销,因为添加了一个旧数据页面和信数据页面之间的连接。因此,将聚集索引作为行定位器降低了非聚集索引相关的开销。二、定义书签查找 当一个查询请求不是优化器选择的非聚集索引一部分的列时,需要一个查找。这对一个聚集索引来说是一个关键字查找,堆堆表来说是一个RID查找。这... 阅读全文
posted @ 2013-10-23 16:52 逆心 阅读(845) 评论(0) 推荐(0) 编辑

2013年10月21日

摘要: 一、目标:编写SQL动态查询 SQL常常和程序代码一起使用。我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句。 string sql = SELECT * FROM Person WHERE Id = $Id 我们期望$Id是一个整型,因此当数据库接收到这个请求时,$Id的值就是查询语句的一部分。 SQL动态查询是有效利用数据库很自然的方法。当你使用程序内的变量来指定如何进行查询时,就是将SQL作为连接程序和数据库的桥梁。程序和数据库之间通过这种方式进行“对话”。 然而,要让程序按照你想要的方式执行并不难,难的是让程序变得安全,不执行你不想让它... 阅读全文
posted @ 2013-10-21 19:22 逆心 阅读(2968) 评论(1) 推荐(1) 编辑

2013年10月19日

摘要: 一、目标:整理数据 有的人有强迫症,他们会为一系列数据的断档而抓狂。 一方面,Id为3这一行确实发生过一些事情,为什么这个查询不返回Id为3的这一行?这条记录数据丢失了吗?那个Column到底是什么?我要为这条数据的丢失负责吗?二、反模式:填充角落 大多数人对于断档的第一反应就是想要填补其... 阅读全文
posted @ 2013-10-19 22:33 逆心 阅读(1373) 评论(0) 推荐(0) 编辑

摘要: 一、目标:恢复或重置密码 每个有密码的程序都会碰到用户忘记密码的情况,现今大多数程序都通过E-mail的回馈机制让用户恢复或者重置密码。这个解决方案有一个前提,这个服务有一个前提,就是这个用户能够访问他在注册时留下的邮箱。二、反模式:使用明文存储密码 在这种恢复密码的解决方案中,很常见的一个错误是允许用户申请系统发送一封带有明文密码的邮件。这是数据库设计上一个可怕的漏洞,并且会导致一系列安全问题,可能会使得未取得授权的人获得系统访问权限。 1、存储密码 首先我们设计一张表如下: 类似于这张表,我们插入一条记录的SQL语句如下:INSERT INTO Account (Accoun... 阅读全文
posted @ 2013-10-19 19:00 逆心 阅读(2017) 评论(1) 推荐(1) 编辑

2013年10月18日

摘要: 一、目标:全文搜索 任何存储文本的应用都有针对这个文本进行单词或词组搜索的需求。我们使用数据库存储越来越多的文本数据,同时也需要搜索速度越来越快。Web应用尤其需要高性能和高扩展性数据库搜索技术。 SQL基本原理就是一列中的单个数据是原子性的。也就是说,当我们对两个值进行比较时,通常是把两个值当... 阅读全文
posted @ 2013-10-18 18:59 逆心 阅读(1178) 评论(0) 推荐(0) 编辑

摘要: 一、使用SQL Server全文搜索配置 要使用SQL Server的全文搜索服务,需要进行如下配置。 1、开启全文搜索服务: 2、开启数据库的全文索引功能: 3、创建全文索引目录: 4、创建唯一索引: 5、创建全文索引: 二、使用全文搜索 CONTAINS搜索方式 1.简单词搜索 - 搜索一个或多 阅读全文
posted @ 2013-10-18 16:43 逆心 阅读(9463) 评论(3) 推荐(4) 编辑

2013年10月17日

摘要: 一、减少输入 程序员都喜欢使用通配符,如: SELECT * FROM Person 又或者省略字段名: INSERT INTO Person VALUES('10','张飞'...)二、捷径会让你迷失方向 对于以上代码,如果你仅仅是在开发过程中用于查看一下数据库信息,又或者你只是写个小程序自己玩玩,这是没有什么问题的。 但是如果一旦你习惯于这样编写正式生产环境中的代码,那问题就随之而来了。 1、破坏代码重构 如果数据库更改了,比如增加了一列: ALTER TABLE Person Add Age int 这下糟糕了,你程序中所有的 INSERT INTO Pe 阅读全文
posted @ 2013-10-17 18:42 逆心 阅读(839) 评论(0) 推荐(0) 编辑

2013年10月15日

摘要: 一、问题提出 随机数在数据库中是经常用到的系统。 例如,一个广告系统希望随机选择一个广告来显示。随机推荐相关文章等等。 在SQL Server中查找随机数最简单的方法为: SELECT TOP 1 * FROM Person ORDER BY NEWID() 以上SQL语句的执行计划如下: 以上这种方法,需要对整个表进行一次排序,而且还无法有效地使用索引。加入我们只需要前几条数据,那么好不容易对整个结果集完成了排序,但绝大多数都浪费了。 以上的方式缺点如下: 随着数据量的增加,随机数的产生会变慢。 数据主键并不连续,并且随机数生成算法并没有考虑到这一点。二、合理使用反模... 阅读全文
posted @ 2013-10-15 17:21 逆心 阅读(716) 评论(0) 推荐(0) 编辑

上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 50 下一页