T_Person 表的字符串类型字段FLevel 为人员的级别,在FAge 字段上建有索引。我们执行下面的SQL语句用于检索所有级别等于10的员工:
SELECT FId,FAge,FName
FROM T_Person
WHERE FAge=10
在这个SQL 语句中,将字符串类型字段FLevel 与数值10 进行比较,由于在大部分数据库中隐式转换类型中数值类型的优先级高于字符串类型,因此DBMS会对FAge字段进行隐式类型转换,相当于执行了下面的SQL语句:
SELECT FId,FAge,FName
FROM T_Person
WHERE TO_INT(FAge)=10
由于在索引字段上进行了计算,所以造成了索引失效而使用全表扫描。因此应将SQL语句做如下修改:
SELECT FId,FAge,FName
FROM T_Person
WHERE FAge='10'
SELECT FId,FAge,FName
FROM T_Person
WHERE FAge=10
在这个SQL 语句中,将字符串类型字段FLevel 与数值10 进行比较,由于在大部分数据库中隐式转换类型中数值类型的优先级高于字符串类型,因此DBMS会对FAge字段进行隐式类型转换,相当于执行了下面的SQL语句:
SELECT FId,FAge,FName
FROM T_Person
WHERE TO_INT(FAge)=10
由于在索引字段上进行了计算,所以造成了索引失效而使用全表扫描。因此应将SQL语句做如下修改:
SELECT FId,FAge,FName
FROM T_Person
WHERE FAge='10'