Oracle like '%...%' 优化
1。尽量不要使用 like '%%'
2。对于 like '%' (不以 % 开头),Oracle可以应用 colunm上的index
3。对于 like '%…' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '%'
4.非用like'%%'不可时,使用Oracle内部函数:INSTR()解决。
建测试表和Index,注意,重点在于带reverse的function index。同时,一定要使用CBO才行
create table test_like as select object_id,object_name from dba_objects;
-------建立测试表
create index test_like__name on test_like(object_name);
------建立索引
create index test_like__name_reverse on test_like(reverse(object_name));
------建立反向索引
analyze table test_like compute statistics for table for all indexes;
------对表进行分析
都过SQLPLUS连接到数据,一定是SQLPLUS,因为下面有写命令在PLSQL的命令行中不被支持;
set autotrace trace exp
-----设定SQL跟踪
set linesize 2000
-------设定输出宽度
select * from test_like where object_name like 'AS%';
使用了索引
select * from test_like where object_name like '%S';
未使用索引
select * from test_like where reverse(object_name)like reverse('%AS');
使用了索引
4.
在大表中,进行模糊查询,一般情况下是用LIKE'%%',但是这个东西走的是全表扫描,如果在数据量非常大的情况下,效率特别慢,因此,尝试用ORACLE函数INSTR()来解决。
实验步骤如下:
首先构造一张百万行的表。
SQL> insert into emp2 select * from emp2;
1032192 rows inserted
如上所示,构造完成
接下来连续运用多个LIKE查询来模糊匹配
SQL> select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
Executed in 1.859 seconds
如上所示,LIKE查询一次,就走一次全表扫描,效率非常慢
同样的效果,现在来换做INSTR函数来执行
SQL> select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
Executed in 0.063 seconds
看到了吧,,时间上的差异很明显,INSTR在一瞬间执行完成,因为这个是查找的字段,而非走全表扫描
看来,oracle 内部函数效率还是高些。
因此,大家以后碰到同样的问题,除了全文检索外,这个也是个好方式
注意:
select id, name from users where instr(id, '101') > 0;
等价于
select id, name from users where id like '%101%'
分享到:
相关推荐
4. **API设计**:库应该提供简洁易用的接口,允许开发者轻松地比较两个或多个字符串的相似度,例如`similarity($str1, $str2)`函数。 5. **性能优化**:为了应对大数据量的字符串处理,库可能采用了缓存机制、哈希...
- 如果可能的话,考虑使用全文索引或创建合适的索引来优化模糊查询。 - 当模式中包含特殊字符时,务必确保已进行正确的转义处理。 通过以上介绍,我们可以看到SQL Server提供了非常强大的模糊查询功能,合理利用...
- `FIND_IN_SET(str, set)`函数用于在一个逗号分隔的字符串列表中查找特定的字符串。例如,`FIND_IN_SET('2', '1,2,3')`会返回2,因为'2'在列表中位于第二个位置。 - 使用`FIND_IN_SET()`需要注意,它对性能的影响...
在PHP开发中,站内搜索(Internal...总的来说,实现PHP站内搜索和关键词加亮显示涉及的关键技术包括数据库查询优化、字符串处理和HTML/CSS的使用。通过不断学习和实践,你可以构建出高效、用户体验良好的站内搜索功能。
因为`LIKE`通常不能利用索引来优化查询,而`IN`则可以。因此,这种替代方法更适用于小规模的数据查询,或者在无法直接使用`IN`的情况下。在生产环境中,应根据实际情况权衡选择最适合的查询方式。
本文将详细介绍一个ASP函数`formatQueryStr(str)`,该函数用于格式化SQL中的LIKE字符串,确保查询的安全性和准确性。 #### 二、函数详解 ##### 1. 函数定义 ```vbscript function formatQueryStr(str) ``` - **...
因此,在设计查询逻辑时应尽量优化查询条件,减少不必要的模糊查询。 2. **安全性**:在处理用户输入时要特别小心,避免SQL注入攻击。可以通过参数化查询等方式提高系统的安全性。 3. **索引问题**:如果在查询中...
如果你遇到权限问题,可以尝试使用`sudo`(在Unix-like系统中)或以管理员身份运行命令提示符。 **PyInstaller的使用** PyInstaller的基本用法是通过命令行接口运行。例如,如果要将名为`my_script.py`的Python...
本文实例讲述了C#适用于like.../// ”str”>要转换的字符串</param> /// 格式化后的字符串</returns> public static string ToLikeSql(string sqlstr) { if (sqlstr == null) return “”; StringBuilder st
sqlstr = "select top 5 * from [NB_Content] where Img like '%%http%%' order by id desc" rs.open sqlstr, conn, 1, 3 if not rs.eof then %> <% i = 1 dim str1, str2, str3 while not rs.eof if ...
在Web开发中,尤其是涉及到搜索引擎或者用户输入查询条件时,多关键词查询是一个常见的需求。ASP(Active Server Pages)作为微软的...同时,对于大型数据集,可能需要优化查询策略,如使用索引,以提高查询性能。
### ASP单表单字段多条件查询技术解析 #### 一、引言 在Web开发领域,尤其是使用ASP...当然,在实际应用中,我们还需要考虑更多的因素,比如查询性能优化、更复杂的查询逻辑支持等,以满足更为复杂的应用场景需求。
数据库访问优化之如何减少数据库服务器CPU运算 本文主要介绍了如何减少数据库服务器CPU运算的方法,包括使用绑定变量、合理使用排序、减少比较操作等。文章首先介绍了使用绑定变量的优点,包括防止SQL注入、提高SQL...
print(str_1 + str_2) ``` 在Python中,短字符串拼接的性能优化在于常量折叠,即在编译阶段将相邻的字面量字符串合并。当拼接的字符串长度小于等于20时,`+`操作符的效率较高。 在实际编程中,选择合适的字符串...
在性能方面,对于短字符串的拼接,由于Python的常数折叠优化,`+`号在最终字符串长度不超过20的情况下可能更快。然而,当需要拼接大量字符串或长字符串时,其他方法如`join()`通常更高效,因为它避免了频繁的对象...
$whereSql .= " And (arc.title like '%$keyarr[$index]%' Or arc.keywords like '%$keyarr[$index]%')"; } echo $whereSql; ?> ``` 这段代码的核心在于将用户输入的关键词字符串(例如 "asp php,jsp")转换为一个...
- 在数据库查询中,SQL的`LIKE`和`=`操作符用于比较字符串。 - 正则表达式可以进行更复杂的模式匹配和字符串比较。 总的来说,比较字符串是否相同是编程中的基本操作,理解各种语言和场景下的比较方式是至关重要...
日期和时间的处理通常涉及`STR_TO_DATE`、`DATE_FORMAT`等函数,它们允许我们解析日期字符串或按特定格式显示日期。对于XML和JSON,MySQL提供`XML_CONCAT`和`JSON_MERGE_PATCH`等函数,而PostgreSQL有`xmlparse`和`...
其基本语法为`CONCAT(str1, str2, ..., str_n)`。例如,如果你有两个字段`name`和`surname`,你可以用`CONCAT(name, ' ', surname)`来拼接出完整的姓名。虽然这个函数与数据量统计看似无关,但理解其用法对于处理和...