【问题标题】:Performance of SQL ORDER BY clause with VarChar Strings使用 VarChar 字符串的 SQL ORDER BY 子句的性能
【发布时间】:2009-09-09 01:57:35
【问题描述】:

我希望在 VARCHAR(200) 字段上使用 ORDER BY 执行 SELECT。阅读 DB2 v9.1 for zOS 网站上它说

排序是按照 使用描述的比较规则 语言元素。

在字符串比较规则中说

通过比较来比较两个字符串 每个对应的字节 细绳。如果字符串没有 长度相同,进行比较 带有较短的临时副本 已填充的字符串 正确的空白,使其具有 与其他字符串长度相同。

我的问题是,这是否意味着我的 ORDER BY 子句会随着数据量的增加而变慢,因为在后台调用 LENGTH() 函数,然后是填充是否正在对每个字符串执行以便按顺序返回结果?

【问题讨论】:

  • ORDER BY 是必要的邪恶。如果查询尽可能快,那就是你所能做的。

标签: sql performance db2


【解决方案1】:

您应该在 VARCHAR 字段上使用索引。索引正是为了优化这个过程的结构。

您所指的这些比较确实发生在没有索引的情况下。但是,如果有索引,则始终有一个结构通过该字段来维护表的顺序,因此 ORDER BY 不会产生显着的额外开销。

【讨论】:

    【解决方案2】:

    Order By 通常会在查询中引发排序操作。如果要排序的行数足够小以适合指定的内存缓冲区,则开销是最小的。对于较大的结果集,其中有太多行无法在内存中执行排序,排序将需要额外的磁盘 I/O 将数据转储到临时存储并重新读取。首选排序键上的集群索引可以大大降低排序的频率和开销,但是每个表只能选择一个聚簇索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多