WEB开发网
开发学院数据库DB2 DB2用户定义函数实现多种语言的排序 阅读

DB2用户定义函数实现多种语言的排序

 2007-05-20 16:19:14 来源:WEB开发网   
核心提示: NAMES: NAMELANGUAGEBobLENMarcLFRSerge LDESELECT NAME FROM NAMESWHERE ICU.SORTKEY(NAME, LANGUAGE) = ICU.SORTKEY(:hv, LANGUAGE)在这个例子中,对于每一行都要准备一个新的
NAMES: NAMELANGUAGE
  ------------
  BobLEN
  MarcLFR
  Serge LDE
  SELECT NAME FROM NAMES
  WHERE ICU.SORTKEY(NAME, LANGUAGE) = ICU.SORTKEY(:hv, LANGUAGE)

在这个例子中,对于每一行都要准备一个新的排序规则。这样做的效率非常低。如果 SORTKEY 的第二个参数替换为一个字面字符串或主机变量,那么查询的性能会好得多。

注意,可以在一个查询中混合使用不同的排序规则,只要每个排序规则在不同的 SORTKEY 实例中。以下查询的性能会好得多:

SELECT NAME FROM NAMES
  WHERE ICU.SORTKEY(NAME, 'LFR') = ICU.SORTKEY(:hv, 'LFR')

尽可能少使用 SORTKEY

如果知道数据是一致的,那么就不需要对每个操作都使用 SORTKEY。例如,考虑前面的 查询 3 和 查询 4。如果数据是以一致的方式输入的,比如总是使用 ä、ö 和 ü,或者已经对数据进行了清理,将所有 ae、oe 和 ue 替换为 ä、ö 和 ü,那么查询 3 和查询 4 会返回同样的结果,而查询 3 运行得快的多。

如果数据是一致的,就不经常需要 SORTKEY。尽可能使用标准的 SQL 比较操作符,并在最后的 ORDER BY 中使用 SORTKEY。

使用生成的列

如果数据库常常使用很少几个排序规则,那么可以考虑使用生成的列预先计算 SORTKEY 的结果,并将这些结果存储在数据库中。

例如,假设一个数据库通常只需要法语和德语排序规则。在这种情况下,根据表的总规模,可以考虑创建生成的列来保存 SORTKEY 的结果。例如:

清单 3. 创建生成的列来保存 SORTKEY 的结果

CREATE TABLE NAMES
  (
  NAME VARCHAR(50),
  NAME_FR_KEY VARCHAR(1200) GENERATED ALWAYS AS (ICU.SORTKEY(NAME, 'LFR')),
  NAME_DE_KEY VARCHAR(1200) GENERATED ALWAYS AS (ICU.SORTKEY(NAME, 'LDE'))
  )
  SELECT NAME FROM NAMES
  ORDER BY ICU.SORTKEY(NAME, 'LFR')

上一页  3 4 5 6 7 8 9  下一页

Tags:DB 用户 定义

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接