2,数据类型的比较规则
主要看几个常见且比较重要的例子。
Char字符的比较,是比较ascii值的大小:
SQL> select 1 from dual where 'ab' >'ac';
1
----------
SQL> select 1 from dual where 'ab'
1
----------
1
SQL> select 1 from dual where 'a'
1
----------
1
字符与数值的比较,有一个隐身转换的过程:
SQL> select 1 from dual where '32' = 32;
1
----------
1
但是下面这样的情况并不会将32隐身转换为’32’:
SQL> select 1 from dual where 'a' = 32;
select 1 from dual where 'a' = 32
ORA-01722: invalid number
之所以这里特意提到隐式转换,是因为,往往在sql条件中,由于隐式转换可能会禁用相关的索引,这个也是sql性能的一大隐患,可以简单看一个例子,注意不能使用上面创建的表,drop后新建,插入下列数据:
Insert into t_test_chr values ('1111', '1111', '1111');
SQL> create index t_test_chr_id2 on t_test_chr(type_varchar2);
Index created
SQL> select * from t_test_chr a where a.type_varchar2='aaaa';
Execution Plan
----------------------------------------------------------
Plan hash value: 3150866331
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 40 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T_TEST_CHR | 1 | 40 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | T_TEST_CHR_ID2 | 1 | | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------
SQL> select * from t_test_chr a where a.type_varchar2=1;
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 217284118
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 40 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_TEST_CHR | 1 | 40 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------
可以看到由于隐式转换使得查询走了不同的执行路径,在很多时候这种变化不是开发者所期待的,所以需要留意数据类型。具体可以参加《sql reference》的 Datatype Comparison Rules 一节。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16179598/viewspace-662797/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16179598/viewspace-662797/