许多查询都包含 ORDER BY 子句,该子句确保各行按可预知的顺序排列。索引可以快速地将信息排序。例如,下面的查询可以使用 customer 表的 lname 列上的索引按姓氏字母顺序访问 customer 表中的行:
SELECT * FROM customer ORDER BY customer.lname
当一个查询既包含 WHERE 子句又包含 ORDER BY 子句时,潜在的问题就会出现。
SELECT * FROM customer WHERE id > 300 ORDER BY company_name
Adaptive Server Anywhere 必须在两种策略之间做出选择:
按照公司名称的顺序检查整个客户表,查看每行的客户 ID 是否大于 300。
使用 id 列上的键只读取 id 大于 300 的公司。然后,需要按照公司名称对结果进行排序。
如果只有很少的 id 值大于 300,则第二种策略较好,因为只需要扫描很少的行并且可以迅速地将行排序。如果大多数 id 值都大于 300,则第一种策略要好得多,因为它不需要排序。
有关排序的详细信息,请参见ORDER BY 子句:对查询结果进行排序或GROUP BY 子句:将查询结果划分为组。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。