合理配置二进制排序规则计算机等级考试

文章作者 100test 发表时间 2010:01:01 08:27:16
来源 100Test.Com百考试题网


  作为数据库管理员,需要彻底了解用户的需求,然后根据用户需求选择合适的排序规则与区域设置。最终才能够让用户得到他们想要的排序结果。
  一、二进制排序规则可以提高数据库性能。
  在SQL Server2008数据库系统中,可以支持多个排序规则。如支持Windows排序规则、二进制排序规则、SQLServer排序规则等等。这些排序规则各有各的特点。数据库管理员只有了解这些排序规则的特点之后,才能够做出合理的选择。笔者这里要分析的二进制排序规则,其最大的优点就是可以采用这种排序规则来提高数据库的性能(不要让临时表空间影响数据库性能)。
  二进制排序规则是基于区域设置和数据类型定义的编码值来的顺序,对数据库中的记录进行排序。这里的区域设置是指一组与地点和区域相关联的信息。这个区域设置可以反映所采用的语言名称、标识符、用于书写该语言的文字以及文化习俗。排序规则可以与一个或多个区域设置相关联。如果数据库中只有单个语言,那么这个区域设置对于排序规则的影响不是很大。但是如果数据库中的记录有多个语言版本,如管理层都是老外,需要用到数据库中的英文记录信息。而普通的员工需要用到中文的记录信息。现在不少的应用系统都支持多语言环境,所以一个数据库中保存不同语言的记录这种现象越来越多。此时数据库管理员可能需要将排序规则关联多个区域设置,以满足不用类型用户的排序需求。
  SQLServer数据库中的二进制排序规则与其它的数据库可能稍有不同(适用于SQL Server生产环境DBA的七大技巧),其强制使用二进制排序顺序,即具有一种强制性。在二进制排序顺序中,定义了要使用的区域设置和ANSI代码页。在各个数据库记录排序规则中,二进制排序规则相对来说是比较简单的。为此对于排序要求比较旺盛的数据库中,将排序规则设置为二进制的排序规则,往往可以在很大程度上改善数据库的性能。
  二、对于Unicode数据与非Unicode数据的不同处理。
  在采用二进制排序规则的情况下,对于Unicode数据与非Unicode数据其处理的方式是不同的。也就是说,即使记录的内容是相同的,但是如果其数据的保存格式不同。如某个表中是采用Unicode数据类型,而另一张表中采用的是非unicode数据类型。即使两张表中的记录完全相同,由于数据保存格式不同,在采用二进制排序时,其最后的结构有可能不同。这主要是因为排序时由于字符集不同,其内部处理的机制也是不同的。如对于Unicode数据类型来说,排序操作时数据比较是基于Unicode码位。而对于非Unicode数据类系国内来说,排序操作时数据比较是基于ANSI代码页中定义的码位。因为记录比较时所采用的码位不同,所以相同记录、数据类型不同则最后排序的结果可能有所不同。这就是Unicode数据类型与非Unicode数据类型在排序时的最大差异之一。
  另外如果采用二进制排序规则,并且采用的是Unicode数据了性,还有一个很大的特点,即在排序时不会考虑区域设置。如现在有两张表,他们表中的记录相同,但是采用的区域设置不同。对于Unicode数据类型来说,进行二进制排序操作之后得到的结果是相同的。因为此时在进行排序操作时,数据库是不会考虑区域设置的影响。但是如果采用的是非Unicode数据类型,则最后排序结果很有可能不同。因为对于非Unicode数据类型来说,数据库系统会考虑区域设置的影响。所以如果在一些数据库应用中,存在不同的区域设置时,数据库管理员就需要知道Unicode数据类型与非Unicode数据类型对排序规则的影响。如果需要在不同的区域设置下,最后的排序结果是相同的,那么就最好将这个数据类型设置为Unicode的数据类型。以减少排序结果的误差。这就是二进制排序规则下,Unicode数据类型与非Unicode数据类型的又一个不同之处。
  三、BIN与BIN2二进制排序规则的差异。
  随着SQLServer数据库的升级换代,在2008数据库版本中,同时存在着二种二进制排序规则,分别为BIN与BIN2排序规则。也许在不久的将来,会淘汰掉一种。但是为了向前兼容性的需要,在短时间内不会淘汰。故数据库管理员需要同时掌握这两种二进制排序规则,特别是要了解他们各自的特点与差异。只有如此才能够最终获得正确打排序结果。
  BIN是比较就的二进制排序规则。其在进行排序操作对记录进行比较时,采用的是不完整的码位比较方法。如二进制排序规则会将第一个字符作为Wchar来进行比较,然后接下来会逐字节进行比较。现在还在采用这个旧版的二进制排序规则,主要是为了兼容性的需求。如现在管理员维护的应用程序还在于使用二进制排序规则的旧版SQLServer数据库进行交互,则最好仍然使用旧版的二进制排序规则。在混合欢聚下,可能二进制旧版排序规则更加合适。
  而BIN2则是一个比较新的二进制排序规则。这个版本的二进制排序规则中包含了一组完整纯码位的比较顺序规则。而BIN二进制排序规则中采用的是不完整的码位比较顺序规则。这就是两者最大的区别。BIN2 后缀标识了实现新的码位排序规则语义的排序规则名称。另外,二进制排序还有一个与 BIN2 对应的比较标志。其优点包括更简单的应用程序开发和更清楚的语义。可见,二进制排序规则BIN2并不是只是对BIN的一个简单的升级。升级后的二进制排序规则,更易于使用,更易于理解。为此除非出于兼容性的考虑,否则的话最好采用BIN2二进制排序规则。如在开发一些新的应用程序过程中,由于不需要考虑兼容性问题,所以最好采用BIN2二进制编码排序规则。
  四、数据库排序规则、列级排序规则与表达式排序规则。
  在SQLServer数据库中,对于排序规则来说还有一个很有特点的地方。即根据排序作用域的不同,将排序规则分为了数据库排序规则、列级排序规则与表达式排序规则。在创建数据库时,可以在创建数据库的语句中采用COLLATE子句来指定默认的数据库排序规则。如果没有指定排序规则的话,则会为这个数据库分配样本数据库的默认排序规则,通常为Model数据库的默认排序规则。而这个model数据库的默认排序规则与SQLServer实力的默认排序规则相同。也就是说,在创建数据库时,如果没有采用更改数据库排序规则的情况下,其默认的数据库排序规则是跟SQLServer实例默认的排序规则相同。如果在列或者语句级别上没有更改默认排序规则的话,在默认情况下会采用这个数据库采用的默认排序规则。当然在后续运行中可以更改这个数据库的默认排序规则,不过需要注意的是,在更改数据库级排序规则时,不会影响列级排序规则或者表达式排序规则。
  列级排序规则对表范围内有效。即在创建表时,可以利用COLLATE子句来指定每一个字符串列的排序规则。如果没有指定排序规则的话,则数据库系统会启用创建数据库时指定的默认排序规则。如果在创建表时,更改了数据库的默认排序规则并且与数据库的排序规则相矛盾,则列级排序规则要比数据库的排序规则优先级高。即此时列级排序规则会覆盖数据库的默认排序规则。
  在执行Select等查询语句时,也可以在子句中进行排序规则的设置。这个就是表达式级排序规则。同理,如果没有设置排序规则的话,则其默认情况下采用的是列级别排序规则。如果设置了排序规则,而且与其他级别的排序规则相互矛盾的话,则这个排序规则优先。
  可见,如果要将数据库的排序规则设置为二进制排序规则的话,还需要注意其作用域的范围。因为不同级别的排序规则设置,其优先性是不同的。

相关文章


计算机等级考试三级数据库模拟试题及答案一计算机等级考试
计算机等级考试三级数据库模拟试题及答案计算机等级考试
新手需快速掌握几种常见数据库对象计算机等级考试
全国计算机等级考试三级PC技术模拟试题及参考答案计算机等级考试
合理配置二进制排序规则计算机等级考试
合理设置SQLServer2008服务器安装向导计算机等级考试
云计算中无法使用关系型数据库计算机等级考试
数据库触发器(Trigger)的一点使用心得计算机等级考试
如何更改数据库状态的事务终止计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛