ORACLE 快速查询数据SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE 快速查询数据SQL语句相关的知识,希望对你有一定的参考价值。

没有索引是否有自增长的ID?.如果没有ID.也没有索引。那么尽量采用可转换为整形的字段作为关联或者作为查询条件。。注千:万不用要like来查.或者关联。即使要加like。
一定要作为离where最远的字段
最近我也碰到个例子。数据库中。A表有200W条数据B表1800W条数据.有索引的情况下。测试了下根据索引来查
在1800W条数据中。准确查询出20条数据(因为是作为分页的)
使用了1秒左右

在200W的数据表中查询某个字段(该字段为索引)
但是使用了
where
testing
like
'%test%'使用了前后模糊查询时间用了10秒以上。并且在分页函数月往后时间越慢
在200W条数据中查询某个字段(该字段为索引)使用了后模糊
where
testing
like
'test%'查询时间基本是在2到10秒左右
在200W的数据中(该字段非索引。nvarchar型的
但是该字段都是数字,都是可被转换为整形的)使用精确查询加模糊查询
where
testing2
=
test2
and
testing
like
'%test%'使用该方法查询时间基本是在1到5秒内浮动
(5秒是查最后一条数据时的情况)

但是当把where
testing
like
'%test%'
and
testing2
=
test2
换成这样以后查询时间和样例一是一样的。基本都在10秒以上。
所以你没有索引的情况下。建议尽量采用
=
号的条件靠前。like
条件要放后面即使有索引前%test%这种查询是要避免的貌似这种事会破坏索引的。还有where
1=1的情况貌似也是会破坏索引的
参考技术A 单条匹配,没有索引也不准备建索引。
只能靠并发来加快检索速度,最快的语句应该是:
select
/*+
full(A)
parallel(A,10)
*/
*
from
A
where
b=c;
理由有2:
full
table
scan
时,oracle会一次读出多个block加快速度
parallel指定并发10线程检索,当然如果允许,你指定20也可以。最好等于CPU个数。

不过还是建议在b列上建索引,这是最好的办法。
参考技术B 上面两条性能都是非常差劲的。。select
id
from
A
where
b='c'
order
by
id
看能否查询到主键。。根据主键索引进行查询
top
count
都是要进行全数据查询的。。一般情况下不建议使用
参考技术C selece
*
from
A
where
id
in
(select
id
from
A
where
b
=
c)
保证比前面的强

以上是关于ORACLE 快速查询数据SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

快速掌握Oracle数据库游标的使用方法有哪些?

如何优化Mysql千万级快速分页

面试官:一千万数据,怎么快速查询?

面试官:一千万数据,怎么快速查询?

oracle数据查询时如何定位问题数据

Oracle出现锁表查询并快速解决