码迷,mamicode.com
首页 >  
搜索关键字:oracle性能优化    ( 80个结果
oracle 性能优化操作十四: 使用基于函数的索引
前面谈到任何对列的操作都可能导致全表扫描,例如: select * from emp where substr(ename,1,2)=’SM’; 但是这种查询又经常使用,我们可以创建一个带有substr函数的基于函数的索引, create index emp_ename_substr on eemp ( substr(ename,1,2) ); 这样在执行上面的查询语句时,这个基于函数的索...
分类:数据库   时间:2015-01-07 09:21:30    阅读次数:163
oracle 性能优化操作十三: 使用nls_date_format
例: select * from record where to_char(ActionTime,'mm')='12'; 这个查询的执行计划将是全表查询,如果我们改变nls_date_format, alert session set nls_date_formate=’MM’; 现在重新修改上面的查询: select * from record where ActionTime='...
分类:数据库   时间:2015-01-07 09:20:39    阅读次数:247
oracle 性能优化操作九: 屏蔽无用索引
继续“oracle 性能优化操作八”的例子 由于实际查询中,还有涉及到DisposalCourseFlag=6的查询,而此时如果用上该字段上的索引,将是非常不明智的,效率也极低。 因此这种情况下,我们需要用特殊的方法屏蔽该索引,以便ORACLE选择其他字段上的索引。 比如,如果字段为数值型的就在表达式的字段名后,添加“+ 0”,为字符型的就并上空串:||"" 如: select * f...
分类:数据库   时间:2015-01-06 10:01:05    阅读次数:178
oracle 性能优化操作七:索引提高数据分布不均匀时查询效率
索引的选择性低,但数据的值分布差异很大时,仍然可以利用索引提高效率。 A、数据分布不均匀的特殊情况下,选择性不高的索引也要创建。 表ServiceInfo中数据量很大,假设有一百万行,其中有一个字段DisposalCourseFlag,取值范围为枚举值:[0,1,2,3,4,5,6,7]。 按照前面说的索引建立的规则,“选择性不高的字段不应该建立索引”, 该字段只有8种取值,索引值的重复率...
分类:数据库   时间:2015-01-06 09:59:52    阅读次数:207
oracle 性能优化操作五:尽量去掉 "<>"
oracle 性能优化操作五:尽量去掉 " 尽量去掉 " 例: UPDATE SERVICEINFO SET STATE=0 WHERE STATE 以上语句由于其中包含了" 实际应用中,由于业务逻辑的限制,字段state为枚举值,只能等于0,1或2,而且,值等于=1,2的很少。 因此可以去掉" 修改为: UPDATE SERVICEINFO SET STATE=0 WHERE ...
分类:数据库   时间:2015-01-06 09:59:24    阅读次数:146
oracle 性能优化操作八: 利用HINT强制指定索引
在ORACLE优化器无法用上合理索引的情况下,利用HINT强制指定索引。 继续“oracle 性能优化操作七”的例子,ORACLE缺省认定,表中列的值是在所有数据行中均匀分布的, 也就是说,在一百万数据量下,每种DisposalCourseFlag值各有12.5万数据行与之对应。 假设SQL搜索条件DisposalCourseFlag=2,利用DisposalCourseFlag列上的索引进...
分类:数据库   时间:2015-01-06 09:58:20    阅读次数:160
oracle 性能优化操作四:尽量去掉"IN"、"OR"
含有"IN"、"OR"的Where子句常会使用工作表,使索引失效; 如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。   例:     select count(*) from stuff where id_no in('0','1');--(23秒) 可以考虑将or子句分开:   select count(*) from stuff where id_no...
分类:数据库   时间:2015-01-05 11:20:52    阅读次数:288
oracle 性能优化操作三:增加查询的范围限制
增加查询的范围限制,避免全范围的搜索。 例:以下查询表record 中时间ActionTime小于2001年3月1日的数据: select * from record where ActionTime 查询计划表明,上面的查询对表进行全表扫描,如果我们知道表中的最早的数据为2001年1月1日,那么,可以增加一个最小时间, 使查询在一个完整的范围之内。修改如下: select * fr...
分类:数据库   时间:2015-01-05 11:20:13    阅读次数:215
oracle 性能优化操作一:避免对列的操作
任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边, 甚至去掉函数。   例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢:   select * from record where substrb(CardNo,1,4)='5378'(13秒) select * from...
分类:数据库   时间:2015-01-05 09:29:12    阅读次数:207
oracle 性能优化操作二:避免不必要的类型转换
需要注意的是,尽量避免潜在的数据类型转换。 如将字符型数据与数值型数据比较,ORACLE会自动将字符型用to_number()函数进行转换,从而导致全表扫描。 例2:表tab1中的列col1是字符型(char),则以下语句存在类型转换: select col1,col2 from tab1 where col1>10; 应该写为: select col1,col2 from tab1 ...
分类:数据库   时间:2015-01-05 09:27:29    阅读次数:183
80条   上一页 1 ... 3 4 5 6 7 8 下一页
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!