小编Jam*_*ins的帖子

Oracle查询在索引编号列上使用'like',性能不佳

在查询1上,即使id是索引列,也正在执行全表扫描.查询2实现了相同的结果,但速度更快.如果运行查询1返回索引列,则它会快速返回,但如果返回非索引列或整行,则查询需要更长时间.

在查询3中,它运行得很快但是"代码"列是VARCHAR2(10)而不是NUMBER(12),并且索引方式与"id"相同.

为什么查询1没有意识到它应该使用索引?是否应该更改某些内容以允许索引编号列更快地执行?

[查询1]

select a1.*
from people a1
where a1.id like '119%' 
and rownum < 5
Run Code Online (Sandbox Code Playgroud)

解释计划
SELECT STATEMENT ALL_ROWS
成本:67字节:2,592基数:4
2 COUNT STOPKEY
    1表访问全表人员
     费用:67字节:3,240基数:5

[查询2]

select a1.*
from people a1, people a2
where a1.id = a2.id
and a2.id like '119%' 
and rownum < 5
Run Code Online (Sandbox Code Playgroud)

解释计划
SELECT STATEMENT ALL_ROWS
成本:11字节:2,620基数:4
5 COUNT STOPKEY
    4表格访问按行ROWID表人员
    成本:3字节:648基数:1
        3 NESTED LOOPS
        成本:11字节:2,620基数:4
            1 INDEX FULL FULL SCAN INDEX people_IDX3
            成本:2字节:54,796基数:7,828
            2 INDEX RANGE SCAN INDEX people_IDX3
            成本:2基数:1

[查询3]

select a1.* …
Run Code Online (Sandbox Code Playgroud)

sql oracle indexing oracle10g sql-like

9
推荐指数
1
解决办法
1万
查看次数

Oracle:将"5-"存储为数字

简短版本:将"5-"作为一个数字转换为表格作为数字的最佳方法是什么?

长版:这是问题,我有一个表,我正在读取由VARCHAR2组成的主要表.我从一些字段中获取数据并将其存储在另一个表中而不进行修改.在一个字段中,我得到"5-"并试图将其存储在NUMBER字段中,该字段抛出错误,因为它无法将其转换为数字.

谁能告诉我是否有最佳实践来处理这样的数据?这似乎是一个常见的财务问题.我相信我可以删除'-'s然后如果发现它贴在前面但我想输入最好的处理方法.

sql oracle plsql

0
推荐指数
1
解决办法
93
查看次数

标签 统计

oracle ×2

sql ×2

indexing ×1

oracle10g ×1

plsql ×1

sql-like ×1