SQL Server 二进制排序规则


        作为数据库管理员,需要彻底了解用户的需求,然后根据用户需求选择合适的排序规则与区域设置。最终才能够让用户得到他们想要的排序结果。


  一、二进制排序规则可以提高数据库性能。

  在SQLServer2008数据库系统中,可以支持多个排序规则。如支持Windows排序规则、二进制排序规则、SQLServer排序规则等等。这些排序规则各有各的特点。数据库管理员只有了解这些排序规则的特点之后,才能够做出合理的选择。笔者这里要分析的二进制排序规则,其最大的优点就是可以采用这种排序规则来提高数据库的性能(不要让临时表空间影响数据库性能)。

  二进制排序规则是基于区域设置和数据类型定义的编码值来的顺序,对数据库中的记录进行排序。这里的区域设置是指一组与地点和区域相关联的信息。这个区域设置可以反映所采用的语言名称、标识符、用于书写该语言的文字以及文化习俗。排序规则可以与一个或多个区域设置相关联。如果数据库中只有单个语言,那么这个区域设置对于排序规则的影响不是很大。但是如果数据库中的记录有多个语言版本,如管理层都是老外,需要用到数据库中的英文记录信息。而普通的员工需要用到中文的记录信息。现在不少的应用系统都支持多语言环境,所以一个数据库中保存不同语言的记录这种现象越来越多。此时数据库管理员可能需要将排序规则关联多个区域设置,以满足不用类型用户的排序需求。

  SQLServer数据库中的二进制排序规则与其它的数据库可能稍有不同(适用于SQLServer生产环境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等查询语句时,也可以在子句中进行排序规则的设置。这个就是表达式级排序规则。同理,如果没有设置排序规则的话,则其默认情况下采用的是列级别排序规则。如果设置了排序规则,而且与其他级别的排序规则相互矛盾的话,则这个排序规则优先。

  可见,如果要将数据库的排序规则设置为二进制排序规则的话,还需要注意其作用域的范围。因为不同级别的排序规则设置,其优先性是不同的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Log Explorer是一款用于分析和查看SQL Server数据库日志的工具。它允许用户查看和监控数据库中发生的事务,以及对数据库的更改和恢复操作进行跟踪和分析。 使用Log Explorer,用户可以浏览和搜索数据库日志,以便找到特定时间段内的事务记录。它提供了一个简单易用的界面,可以根据时间、用户、操作类型等条件过滤和排序数据库日志。此外,Log Explorer还提供了快速定位和还原误操作的功能,可以帮助用户恢复数据库到之前的状态。 Log Explorer还具有强大的分析功能,可以根据数据库日志数据生成报表和图表,帮助用户了解数据库的使用情况和趋势。它可以生成各种统计数据,如事务数、操作类型分布、用户操作频率等,以及提供自定义报表功能,满足用户对数据库日志分析的不同需求。 除了查看和分析日志,Log Explorer还提供了一些实用的管理功能。它可以备份和还原数据库日志,以及对日志进行压缩和清理,帮助用户管理数据库的空间和性能。此外,Log Explorer还支持多种日志格式,如二进制日志、文本日志等,适用于不同版本的SQL Server数据库。 总的来说,Log Explorer是一款功能强大、操作简便的SQL Server数据库日志分析工具。它可以帮助用户监控和追踪数据库的操作,及时发现和解决问题,提高数据库的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值