`

索引与优化like查询

 
阅读更多

1. like %keyword    索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。

2. like keyword%    索引有效。

3. like %keyword% 索引失效,也无法使用 反向索引。

====================================================================
1. 使用下面的函数来进行模糊查询,如果出现的位置〉0,表示包含该字符串。
查询效率比like要高。
如果: table.field like  ‘%AAA%’ 可以改为 locate (‘AAA’ , table.field) > 0

LOCATE(substr,str)
     
POSITION(substr IN str)
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0。

使用instr
select count(*) from table t where instr(t.column,’xx’)> 0
这种查询效果很好,速度很快。

2. 查询%xx的记录

select count(c.c_ply_no) as COUNT

  from Policy_Data_All c, Item_Data_All i

 where c.c_ply_no = i.c_ply_no

   and i.C_LCN_NO like ’%245′

在执行的时候,执行计划显示,消耗值, io 值, cpu 值均非常大,原因是 like 后面前模糊查询导致索引失效,进行全表扫描


解决方法:这种只有前模糊的
sql 可以改造如下写法

select count(c.c_ply_no) as COUNT

  from Policy_Data_All c, Item_Data_All i

 where c.c_ply_no = i.c_ply_no

   and reverse( i.C_LCN_NO)  like reverse( ‘%245′)

使用 翻转函数 +like 前模糊查询 + 建立翻转函数索引 = 走翻转函数索引,不走全扫描。有效降低消耗值, io 值, cpu 值这三个指标,尤其是 io 值的降低。

分享到:
评论

相关推荐

    pgsql查询优化之模糊查询实例详解

    前言 一直以来,对于搜索时模糊匹配...然后搜个简单的模糊匹配条件如 LIKE “血常规%”,可以发现查询计划生成如下,索引并没有被使用上,这是因为传统的btree索引并不支持模糊匹配 查阅文档后发现,pgsql可以在Btree

    利用reverse索引优化like语句的方法详解

    主要介绍了关于利用reverse索引优化like语句的方法,文中通过图文介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

    oracle like 的优化

    oracle like 的优化,使用索引、反向索引

    MySql数据库优化之SQL和索引的优化

    1.1 单表的查询索引的执行过程及优化-普通查询 1.2 单表查询索引的执行过程以及优化-普通查询+排序或分组 1.3 多表查询-连接查询索引的执行过程及优化 1.4 多表查询-连接查询代替子查询 2 索引失效 2.1like后面的...

    MySQL第二天:查询,索引及优化

    文章目录慢查询慢查询配置慢查询解读慢查询工具mysqldumpslowpt_query_digest索引聚簇索引跟非聚簇索引聚簇索引非聚簇索引:覆盖索引(Covering Index)总结:重点执行计划执行计划详解重点 MySQL优化参考 ...

    postgresql like模糊查询优化方案

    使用场景: 1. 要求LIKE '%xxx%'模糊查询支持索引,提高数据检索速度 2. 在上一场景的基础上,实现了对多个OR条件语句的索引查询支持

    SQL Server数据库查询速度慢原因及优化方法

    like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。 9、DB Server 和APPLication Server ...

    Mysql面试过关!(详解:索引+常用引擎+常见问题+sql调优)

    3、索引失效场景(补充:以下在实际应用中并不会一定导致索引失效,基于mysql不同版本的优化规则) 3.1 在联合索引的场景下,查询条件不满足最左匹配原则 3.2 索引列参与了运算,会导致全表扫描,索引失效(除主键...

    mysql数据库sql优化

    1.1.8. 策略8.Like查询要当心 7 1.1.9. 策略9.字符类型加引号 8 1.1.10. 策略10.OR改UNION效率高 9 1.1.11. 测试题 9 1.2. 批量导入 11 1.2.1. insert语句优化; 11 1.2.2. LOAD DATA INFLIE 11

    有关于oracle数据库的sql优化

    上面这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。  当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。 **...

    MySQL Like模糊查询速度太慢如何解决

    问题:明明建立了索引,为何Like模糊查询速度还是特别慢? Like是否使用索引?  1、like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。 ...

    SQL查询语句优化总结

    第七掌 索引提高数据分布不均匀时查询效率 5 第八掌 利用HINT强制指定索引 6 第九掌 屏蔽无用索引 6 第十掌 分解复杂查询,用常量代替变量 7 第十一掌 like子句尽量前端匹配 7 第十二掌 用Case语句合并多重扫描 7 第...

    SQL性能优化

     LIKE可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。性能肯定大大提高。...

    PLSQL程序优化和性能分析方法

    2.5 索引使用优化 16 2.5.1 避免在索引列上使用函数或运算 16 2.5.2 避免改变索引列的类型. 17 2.5.3 避免在索引列上使用NOT 17 2.5.4 用>=替代> 18 2.5.5 避免在索引列上使用IS NULL和IS NOT NULL 18 2.5.6 带...

    SQL 优化原则

    上面这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。  当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。 **...

    MySQL如何基于Explain关键字优化索引功能

    可以帮助选择更好的索引和写出更优化的查询语句。简单讲,它的作用就是分析查询性能。  explain关键字的使用方法很简单,就是把它放在select查询语句的前面。  mysql查看是否使用索引,简单的看type类型就可以。...

    50个永不过时SQL性能优化技巧.pdf

    SQL优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能...优化like语句等这样那样的问题。 作为数据开发人员,对SQL的优化,应该是我们必备的技能才是,熟练掌握它,让你的SQL代码快到飞起~~~

    SQL普查优化信息汇总

    如果查询中包含了子查询,那么注意首先优化子查询 注意关联子查询,尽量减少关联子查询的使用,因为它的代价很高,并且非常消耗CPU 在Sql语句中使用not exists 代替 not in 用表连接替换EXISTS 使用带有前导字段的...

    重温索引优化

    like查询前面部分未输入,以%开头无法命中索引。 可以使用覆盖索引(type=index)。 场景三:SELECT * FROM user_info WHERE id 1; 查询条件使用不等式(或者!=)。 场景四:SELECT * FROM user_info WHERE name = 1...

    mysql 索引详细介绍

    mysql 索引详解: 在mysql 中,索引可以分为两种类型 hash索引和 btree索引。...比如: order_sn like ‘134%’ 这样可以使用到索引。  4.匹配范围值查询 createTime>’2015-01-09′ and createTime<‘2

Global site tag (gtag.js) - Google Analytics