ORACLE中的列索引
我有下面的查询,因为MATTER表中有大量数据,执行LIKE语句需要花费大量时间,所以我考虑使用上下文索引和CONTAIN。 我应该只在标题或其他栏目上做索引吗,。根据下面的选择查询 非常感谢您的投入ORACLE中的列索引,oracle,Oracle,我有下面的查询,因为MATTER表中有大量数据,执行LIKE语句需要花费大量时间,所以我考虑使用上下文索引和CONTAIN。 我应该只在标题或其他栏目上做索引吗,。根据下面的选择查询 非常感谢您的投入 SELECT DISTINCT dm.MATTER_SEQ FROM MATTER dm ,MATTER_TYPE dmt ,MATTER_SUBTYPE dms ,STATUS ds ,FILING df WHERE dm.MATTER_TYPE_SEQ
SELECT DISTINCT dm.MATTER_SEQ
FROM MATTER dm
,MATTER_TYPE dmt
,MATTER_SUBTYPE dms
,STATUS ds
,FILING df
WHERE dm.MATTER_TYPE_SEQ=dmt.MATTER_TYPE_SEQ
AND dm.MATTER_SUBTYPE_SEQ=dms.MATTER_SUBTYPE_SEQ
AND dm.STATUS_CODE NOT IN ('abc','jkl','xyz')
AND dm.STATUS_CODE = DS.STATUS_CODE
AND dm.IS_EXTERNAL='1'
AND dm.IS_DELETED='0'
AND dm.MATTER_SEQ = df.MATTER_SEQ
AND trunc(dm.CREATED_DATE) between '01-NOV-95' AND '02-OCT-18'
AND upper(dm.MATTER_TITLE) like(upper (q'{%jdasuidhajsndjahs%}'))
尝试创建函数索引(dm.MATTER\u TITLE)和第二个trunc(dm.CREATED\u DATE)
我还考虑到连接条件中的列已经有索引。如果没有,请将它们编入索引 听起来您已经意识到(“%ABC”)的效率非常低,因为它通常不能使用索引并进行完整的表扫描 如果其他优化建议没有多大帮助,那么使用上下文索引可能会获得更好的性能。一定要设置子字符串索引首选项,以便它专门为中缀搜索(如您的)准备索引。(如果在字符串中间也有通配符(‘ABC%DEF’),您可能还需要设置前缀选项。” 还要注意,默认情况下上下文索引不区分大小写,因此不需要执行UPPER()。我还没有尝试将q''文本与contains一起使用,所以我不确定这将如何工作
AND CONTAINS(dm.MATTER_TITLE, q'{%jdasuidhajsndjahs%}') > 0
1) 旧的连接语法2)不可搜索的表达式
upper(dm.MATTER\u TITLE)比如(upper(q'{%jdasuidhajsndjahs%}')
和trunc(dm.CREATED\u DATE)介于…
3)DISTINCT
与单个表不同意味着您要搜索存在,这样您的查询就可以被重写了。外部的数据类型是什么?是否被删除了?如果是数字,那么系统必须进行隐式类型转换,这也会增加一些开销。声明中的那些在做什么<代码>和dm.INDUSTRY(dm.INDUSTRY)中的dm.MATTER(类型)和dm.MATTER(类型)中的dm.MATTER(类型)和dm.MATTER(子类型)中的dm.MATTER。。对1确实=1所以继续…感谢xQbert将这个问题指向另一个小问题,它看起来像dm。CREATED_DATE
是一个日期,所以您可能希望在日期'1995-11-01'和日期'2018-10-02'之间使用日期文字,而不是varchar文字-和trunc(dm.CREATED_DATE)
。。。很抱歉,在我用来表示感谢的实际查询中。。我会尝试同样的方法。嘿,Kfinity,我得到的错误是indextype不存在,我得到的错误是Catsys和CtxCAT都相同。你能帮我吗?你的数据库里有CTXSYS模式吗?您可能需要安装Oracle文本组件。感谢Kfinity,您的投入帮助很大:)
AND CONTAINS(dm.MATTER_TITLE, q'{%jdasuidhajsndjahs%}') > 0