【发布时间】:2021-07-18 20:03:17
【问题描述】:
我有一个列名imsi,列的长度应该是15个字符,我们可以根据条件的列长度创建索引
我已经在length(imsi) 上创建了一个索引,但我想要length(imsi)<>15 的所有记录,但查询需要很长时间,而length(imsi)<15 以毫秒为单位提供输出。
但我想要length(imsi) <> 15的输出
select * from msisdn_data where length(imsi)<> 15
或
select * from customer_data where length(imsi)>15 or length(imsi)<15
这两个查询都需要很长时间
【问题讨论】:
-
你能告诉我两个查询的当前执行计划吗?
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 361K| 613M| 625K (1)| 00:00:25 | |* 1 | TABLE ACCESS FULL| CUSTOMER_DATA | 361K| 613M| 625K (1)| -
对于这两个查询都发生了全表扫描
-
正如你提到的,
length(imsi)<15以毫秒为单位提供输出。length(imsi) > 15呢? -
两者都是单独的,它以毫秒为单位提供输出,其中使用 or 子句进行全表扫描
标签: sql oracle query-optimization