表system_graduate有120万数据select count(*) from system_graduate where 1=1 and c_name like'%李%';
执行需要5秒
select * from system_graduate where 1=1 and c_name like'%李%';
执行需要0.125秒
select * from system_graduate where 1=1 and c_name like'%李%' order by c_id;;
执行需要5秒 请高手指点
执行需要5秒
select * from system_graduate where 1=1 and c_name like'%李%';
执行需要0.125秒
select * from system_graduate where 1=1 and c_name like'%李%' order by c_id;;
执行需要5秒 请高手指点
第二句在first_row模式下會很快取得結果集的前部分,但如果要全部顯示出來,估計也要5秒
120万的数据,70个字段,有很多查询条件,好几个是like查询
请问有什么办法优化性能吗?
目前我们程序查询下来需要40秒左右
oracle不懂,请高手帮忙想个方案
--创建临时表:表复制的速度比查询要快的多!
create table t_temp as select * from system_graduate where 1=1 and c_name like'%李%';--使用时:
select * from t_temp; --使用此查询行了! 速度应该很快的!
网上查的都不一定正确啊,特别是关于oracle优化的,都抄来抄去的
下面是我自己测试以后得出的结论:
环境:oracle10g
oracle10g对like查询肯定是优化了,不需要全表检索,秒杀级的
一直以来认为的"="是很快的,但是在oracle10g里都要进行全表扫描
in查询也是要全表扫描
所以,对需要进行"="和in查询的列建索引,就都是秒杀级了
产生一个新问题是:count(*)比较慢,解决方案需要再查找.说这么多,就想给我一样碰到问题的人一个参考!
先不结帖,等那个count(*)问题解决了再结帖
= 和 in 是不是走全表扫描,要看你有没有索引,查询语句和查询结果,你确定你自己做的测试涵盖了所有情况吗?
count(*)没有办法进行优化,oracle的计算能力还不是最顶尖的。
索引不能起作用,但是改成这样
where 1=1 and c_name like'李%';
就可以起作用了。
就是查‘李’开头的是可以的,但是查包含‘李’和以‘李’结尾的都是不行 的
"你确定你自己做的测试涵盖了所有情况吗?",这句话又像在责怪我.
我只想说一句:不要把自己整得那么牛b行吗?我一个小菜鸟,不懂了就在csdn上提问,解决问题的过程中找到一些有用的(或者我本人是这么认为)心得经验.发上来给跟我一样碰到这样的问题的人一个参考.本来很简单的一件事情.你要是觉得我技术上说得不对,就指出来.非得把自己整到天上,然后在对着地球人说话一样的气势,真可笑!