带有VarChar字符串的SQL ORDER BY子句的性能

时间:2009-09-07 05:28:53

标签: sql performance db2

我希望在 VARCHAR(200)字段上使用 ORDER BY 进行 SELECT 。阅读DB2 v9.1 for zOS站点就可以了

  

按照规定执行订购   与中描述的比较规则   语言元素。

在字符串比较的规则中说

  

通过比较比较两个字符串   每个的相应字节   串。如果字符串没有   相同的长度,进行比较   用短的临时副本   已经填充的字符串   正确的空白,所以它有   与其他字符串相同的长度。

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

2 个答案:

答案 0 :(得分:7)

您应该在VARCHAR字段上使用索引。索引是一种精确优化此过程的结构。

您指的那些比较确实在没有索引时发生。但是,如果存在索引,那么通常会有一个结构来维护该字段的表顺序,因此ORDER BY不会产生大量的额外开销。

答案 1 :(得分:1)

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

相关问题