当前位置: 首页 > news >正文

oracle Like模糊查询与带有关键字Reverse的索引应用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

oracle Like模糊查询与带有关键字Reverse的索引应用

在对oracle的SQL优化过程中经常会遇到【like'%abc'】破坏索引的问题,但是如果真有此类需求,该如何在不破坏索引的基础上进行查询呢。

上代码

sys@mescp> select reverse('123') from dual;
REVERSE('123')

321
1 row selected.
sys@mescp> create table test_like as select object_id,object_name from dba_objects;
Table created.
sys@mescp> create index test_like__name on test_like(object_name);
Index created.
sys@mescp> create index test_like__name_reverse on test_like(reverse(object_name));
Index created.
sys@mescp> analyze table test_like compute statistics for table for all indexes;
Table analyzed.
sys@mescp> set autotrace trace exp
-- '常量开头的like , 会利用index ,没问题…… '
sys@mescp> select * from test_like where object_name like AS%';
Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)
2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)
--'开头和结尾都是 % ,对不起,很难优化'
sys@mescp> select * from test_like where object_name like '%%';
Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)
1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)
-- '以常量结束,直接写的时候是不能应用index的'
sys@mescp> select * from test_like where object_name like '%S';
Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)
1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)
--'以常量结束的,加个reverse 函数,又可以用上index了'
sys@mescp> select * from test_like where reverse(object_name)like reverse('%AS');
Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)
2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)

image.php?url=0J1dNKSVwY

重庆思庄18年5月OCP认证培训周末班正在授课,欢迎联系试听!新的OCP周末班将于6月2日开课,火热报名中,名额有限,请提前预定!更多详情访问思庄网站咨询在线客服。

转载于:https://my.oschina.net/u/3761438/blog/1811349

相关文章:

  • JQuery EasyUI 动态隐藏
  • 安装OpenStack Queens版本的教程推荐
  • [leetcode]Flatten Binary Tree to Linked List
  • 深度学习中常见问题
  • 华为云:如何解除数据库高并发场景下的达摩克利斯之剑?
  • Tomcat的参数配置及一般问题的解决
  • node.js来爬取智联全国的竞争最激烈的前十岗位
  • css颜色代码大全:(网页设计师和平面设计师常用)
  • python3.6+scrapy+mysql 爬虫实战
  • 数据库分库分表思路
  • linux考试
  • 在路上 - 精选
  • perl anyevent
  • 2018全球互联网经济大会,春季峰会在南京开幕
  • 不止于IaaS,运营商要用PaaS构筑生态竞争力
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • eclipse的离线汉化
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue.js源码(2):初探List Rendering
  • 编写高质量JavaScript代码之并发
  • 工作中总结前端开发流程--vue项目
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 转载:[译] 内容加速黑科技趣谈
  • ​Python 3 新特性:类型注解
  • ​Spring Boot 分片上传文件
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #{} 和 ${}区别
  • (3)STL算法之搜索
  • (39)STM32——FLASH闪存
  • (C++20) consteval立即函数
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (五)Python 垃圾回收机制
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 表达式计算:Expression Evaluator
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net流程开发平台的一些难点(1)
  • @Mapper作用
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [Android]使用Android打包Unity工程
  • [ARC066F]Contest with Drinks Hard
  • [ARM]ldr 和 adr 伪指令的区别
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败
  • [GN] 设计模式——面向对象设计原则概述
  • [html] 动态炫彩渐变背景
  • [leetcode]Symmetric Tree
  • [LeetCode刷题笔记]1 - 两数之和(哈希表)
  • [ListView.View=List]的垂直滚动条
  • [NYOJ 536] 开心的mdd