加载中…
个人资料
寸草心
寸草心
  • 博客等级:
  • 博客积分:0
  • 博客访问:23,421
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

ORACLE复合索引使用 注意事项

(2010-04-20 17:08:14)
标签:

杂谈

分类: ORACLE

复合索引的第一列一定要出现在WHERE子句中。

一.like "%_" 百分号在前.
    二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT、GROUP BY等子句中包含非复合索引列

例句:

用不到索引

SELECT
         CORP.BATCHCODE, CORP.CLITNO,  CORP.LOANBLAN
    FROM VI_CORPCLIT_INFO CORP
    WHERE CORP.BATCHCODE = '200910'

用到索引

SELECT
         CORP.BATCHCODE, CORP.CLITNO
    FROM VI_CORPCLIT_INFO CORP
    WHERE CORP.BATCHCODE = '200910'
    三.字符型字段为数字时在where条件里不添加引号.

四.字符型字段||'',并且SELECT、GROUP BY等子句中包含非复合索引列。

用不到索引

SELECT
         CORP.BATCHCODE, CORP.CLITNO,  CORP.LOANBLAN
    FROM VI_CORPCLIT_INFO CORP
    WHERE CORP.CLITNO||'' = '200910'

用到索引

SELECT
         CORP.BATCHCODE, CORP.CLITNO
    FROM VI_CORPCLIT_INFO CORP
    WHERE CORP.CLITNO||'' = '200910'
    五.对索引列进行运算.需要建立函数索引。

用不到索引

SELECT
         CORP.BATCHCODE, CORP.CLITNO,  CORP.LOANBLAN
    FROM VI_CORPCLIT_INFO CORP
    WHERE substr(CORP.CLITNO,1) = '200910'

用到索引

SELECT
         CORP.BATCHCODE, CORP.CLITNO
    FROM VI_CORPCLIT_INFO CORP
    WHERE substr(CORP.CLITNO,1) = '200910'
    六。not in, not exist, <>
    七。当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
    八。基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
    九。有时都考虑到了但就是不走索引,drop了从建试试在
    十。B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null  都会走

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有