当数据库服务器考虑一语句是否与 SQL 语句高速缓存中的语句一致时,下列项必须相匹配:
- 字母大小写
- 注释
- 空格
- 优化设置
- SET OPTIMIZATION 语句选项
- 优化器伪指令
- SET ENVIRONMENT OPTCOMPIND 语句选项或 OPTCOMPIND 环境变量的设置,或 ONCONFIG 文件中的
OPTCOMPIND 配置参数的设置。(如果对同一查询存在冲突的设置,则这是优先级的降序排列。)
- 并行性设置
- SET PDQPRIORITY 语句选项或 PDQPRIORITY 环境变量的设置
- 查询文本字符串
- 文字
如果 SQL 语句在语义上等同于在 SQL 语句高速缓存中的语句,但文字不同,则不认为是一致的语句且具备条目进入高速缓存的资格。例如,下列 SELECT 语句是不相同的:
SELECT col1, col2 FROM tab1 WHERE col1=3;
SELECT col1, col2 FROM tab1 WHERE col1=5;
在此示例中,两个语句都进入到 SQL 语句高速缓存内。
然而,主变量名称并不重要。例如,下列选择语句认定为相同:
SELECT * FROM tab1 WHERE x = :x AND y = :y;
SELECT * FROM tab1 WHERE x = :p AND y = :q;
在先前的示例中,虽然主名称不同,但语句够资格,因为大小写、查询文本字符串和空格都匹配。然而,性能没有改进,因为通过 PREPARE 语句已解析和优化了每一语句。