当可以使用索引来满足 IN 列表谓语时,将使用 InList。例如,在以下查询中,优化程序发现它可以使用 Employees 表的主键索引来对该表进行访问。
SELECT * FROM Employees WHERE EmployeeID IN ( 102, 105, 129 ); |
为了完成这一任务,使用特殊的 IN 列表表在左侧建立了一个连接。行读取自 IN 列表表,并用于探查 Employees 表。
要使用 InList,IN 列表谓语中的每个元素必须是常量,或者是可在优化时经计算得到常量值的某个值(如 CURRENT DATE、CURRENT TIMESTAMP 以及非确定性系统函数和用户定义的函数),或者是在查询块的一次执行中为常量的某个值(外部引用)。例如,下面的查询满足 InList 的条件。
SELECT *, ( SELECT FIRST GivenName FROM Employees e WHERE e.DepartmentID IN ( 500, d.DepartmentID ) ORDER BY e.DepartmentID ) FROM Departments d; |
多个 IN 列表谓语可以使用同一索引来得到满足。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |