浅谈SQL Server表分区及其应用

by shinichi_wtn 2016-08-08 22:20
本文简单介绍了SQL Server企业版才拥有的强大的表分区(Table Partition)功能,并用一个实际的例子完成了表分区涉及的基本操作。表分区拥有许多优势,其对用户是透明的,但是在底层应用了数据分区,根据分区定义对表的数据进行了划分(比如把不同的分区放到不同的FileGroup),从而能够实现快速地数据装载/移动/删除。设想一下我们有一个数据仓库的应用,每天会把新一天的数据加载到表FactTable中,这个数据量往往很大。如果不应用表分区,那我们需要在同一个表FactTable里进行数据的插入操作,而插入操作往往会锁定整个表,这时往往会阻碍其他用户的查询,以及查询性能。 [More]

SQL Server 2008删除或压缩数据库日志的方法

by shinichi_wtn 2010-09-20 20:15
由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间。由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就没有多少作用了,因此想办法把数据库日志文件收缩到很小或者删除。 网上搜索相关解决方案后,得到的答案丰富多彩,但是真正管用的方案并不多,这里分享一个csdn上找到的方法。这个方法讲述了SQL Server 2005和SQL Server 2008在收缩数据库日志的不同之处,颇有帮助。同时,该方法的效率很高,收缩600G的日志到10M只花了不到30秒。 下面一张图是收缩后的... [More]

MySql字符集初探,MySql编码问题

by shinichi_wtn 2010-04-10 00:25
今天从一个大文本文件里导入数据到MySql数据库中,但是发现中文字段却没有值,在导入时换成其他编码后更是出现了乱码。因为用程序逐行读这个大文本文件的前几行是可以读出来中文的,于是觉得应该是MySql编码设置不对引起的。因此上网查阅了一些资料,了解了一些基本的东西。 MySql的字符编码可以在服务器、数据库、表、字段各种层次上定义,最底层是字段字符集,当数据库和各个字段建立好后,改变上层的字符集不会改变具体字段的字符集;当创建新的数据库和表时,则以上层的默认字符集作为其字符集。每个字符集对应许多Collation(”校对规则"),"校对规则"是在字符集内用于比较字符的一套规则,主要... [More]

用MySql的查询分析语法explain来优化查询和索引

by shinichi_wtn 2010-03-24 19:03
数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对已有的表进行某种检索,但是在实际应用中,查询前我们并不知道该查询会如何运行、会使用多少时间、会涉及多少字段和记录,每次输入了SQL语句,点击运行,然后慢慢等待结果的出现,好的查询语句效率很高,而有时候也会遇到查询缓慢,久久没有运行完成的情况。 由于我们并不知道实际查询的时候数据库里发生了什么,数据库软件是怎样扫描表、怎样使用索引,因此我们能感知的就只有查询运行的时间,而往往在数据规模不大时,查询是瞬间的,因此在写SQL语句时也就比较随意,也很少使用索引来加速查询的速度。不过一旦数据规模增大,比如百万、千万、几亿的时候,我们写同样... [More]

MySql查询时间段的两种方法

by shinichi_wtn 2010-03-22 10:52
MySql的时间字段有date、time、datetime、timestamp等,往往我们在存储数据的时候将整个时间存在一个字段中,采用datetime类型;也可能采用将日期和时间分离,即一个字段存储date,一个字段存储时间time。无论怎么存储,在实际应用中,很可能会出现包含“时间段”类型的查询,比如一个访问记录数据库,需要统计每天的访问数量,这个每天就是一个时间段。下面介绍MySql查询时间段的两种常见方法,其他数据库也可以类似实现。 方法一:传统方式,即指定开始时间和结束时间,用"between”或者"<",">"来建立条件,比如查询2... [More]

微软MySQL to SQL Server迁移工具SSMA CTP1.0试用

by shinichi_wtn 2010-01-13 20:22
今天下载了微软才发布的MySQL to SQL Server迁移工具SQL Server Migration Assistant 2008 for MySql,由于甲骨文收购SUN一拖再拖,MySql的命运也不可知,于是微软发布该软件,帮助MySql用户把数据迁移到SQL Server里面。 其实MySql是一款很棒的数据库软件,现在许多企业级的应用都使用了它,但是MySql在安全性和超大规模数据库应用(数据仓库、数据挖掘等)中,没有收费的SQL Server和Oracle好,但是,由于其轻便、开源、免费,深受用户喜爱,大家也不希望MySql被甲骨文所遗弃,现在我做的一些项目就是基于MySq... [More]

SQL Server与MySQL存储过程学习记录之二

by shinichi_wtn 2009-12-18 10:43
在学习记录一中,讨论了SQL Server与MySQL各自建立存储过程的方法和过程,并简单做了一下对比。在实际应用中,查询往往是很复杂的,不可能用一简单的一行SQL语言就能满足我们的需求,这个时候,就需要使用SQL编程。 实现SQL编程有两种方式,第一种就是用高级语言进行反复调用,因为我们熟悉一门或多门高级程序语言,比如C,C++,C#,PHP,Java等等,这些都是能调用数据库操作的。比如在C#这样的面向对象编程语言里,万物皆对象,在创建一个数据库调用程序时,首先需要新建一个连接,同时建立一条SQL操作指令,然后打开连接,执行该指令,最后返回结果,关闭连接。 首先以C#调用SQL Ser... [More]

SQL Server与MySQL存储过程学习记录之一

by shinichi_wtn 2009-12-15 13:39
SQL语句执行的时候要先编译,然后执行。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 SQL Server的存储过程在设计BNU校园百科的时候就有使用,因为存储过程不仅能提高SQL语言的执行效率,同时参数化的调用比每次都写一条SQL语句来得方便。 【SQL Server存储过程的建立】 在企业管理器新建一个StoreProcedure会自动生成相应导航代码,方便用户编写函... [More]

SQL Server 全文索引查询T-SQL学习笔记之二(Full-text index)

by shinichi_wtn 2009-12-12 15:10
在学习笔记一里已经掌握了基本的contains语法和freetext语法的用法,但是面对一些复杂的操作,基本的包含语法是不够用的,如果我们想要查询含有“世界”或“末日”的所有字符串集合,那么无论是contains([column],'世界末日')或者freetext([column],'世界末日')都不能很好的工作,当然contains本身是可以含有条件的,因此有两个解决方案。 多条件查询 第一个就是传统的where多条件查询,加上两个contains语句,然后用or连接 select [Column] as [result] from S... [More]

SQL Server 全文索引查询T-SQL学习笔记之一(Full-text index)

by shinichi_wtn 2009-12-11 11:29
引言 这段时间为了提高海量字符串数据的查询效率,我对字段添加了全文索引。首先全文索引相对于传统的索引是有区别的,这是因为传统的索引主要是以首字母开始建立的索引,处理like 'keword%'这样的查询会很高效,但是如果查询时不限定首字母,而只是包含某个词,比如like '%keyword%'这样的查询,实际操作中无法使用传统索引加速查询效率,而只能一项一项比较了。 而全文索引正是提供了“包含”式查询机制,查询一个长字符串中是否包含给定关键词的功能,这无论是在搜索引擎或是网站的搜索平台都是很有用处的。 首先,推荐一本学习SQL Server全文索引的书籍,这本书详... [More]

About

shinichi_wtnI'm Shinichi_wtn

Software Engineering Manager at Microsoft

[More...]


Month List