美文网首页@IT·互联网程序员MySQL
like 优化---反向索引,合并索引

like 优化---反向索引,合并索引

作者: 数据运营python | 来源:发表于2017-05-14 15:53 被阅读744次

背景

业务操作的场景有很多需要数据进行模糊查询,这个时候就会用到关键字"like",虽然这样对用查询东西比较方便,但是随着数据量的增加,这样的语句越来愈慢。

SELECT
   *
FROM
    table_A A
inner join table_B B f on A.ID = B.ID
WHERE
    A.NAME LIKE '%s%'
ORDER BY
    A.ID DESC
LIMIT 10;

优化思路

反向索引

like 的字段建立索引,但是由于前面加了%索引会失效。这个时候可以通过空间换时间的方式。把原来的like前面的%去掉,新增一个字段,存储NAME字段的方向数据,并且对新增的字段也加索引。例如原来的字段里面存的是“abcd”,那新增的字段就是存“dcba”的数据,这个时候语句变成如下:

SELECT
   *
FROM
    table_A A
inner join table_B B f on A.ID = B.ID
WHERE
    A.NAME LIKE 's%'
  or A.RES_NAME LIKE CONCAT(REVERSE('s'),'%')
ORDER BY
    A.ID DESC
LIMIT 10;

新增的字段需要对要查找的值进行反转,这样的话,该语句可以达到前面的语句的功能,而且两个字段的索引都有效

合并索引

虽然上面的like的字段都可以用上索引了,但是因为用了or并且进行排序,性能没有得到多大的提升,通过分析是因为需要进行排序导致查询比较慢,但是排序是业务需要,没有办法去掉。通过修改为下面的语句:

SELECT
   *
FROM
    table_A A
left join table_B B f on A.ID = B.ID
WHERE
    A.NAME LIKE 's%'
  or A.RES_NAME LIKE CONCAT(REVERSE('s'),'%')
ORDER BY
    A.ID DESC
LIMIT 10;

通过把inner join 改为left join后,对语句进行解释,发现extra字段出现“Using sort_union”,修改前该字段现实“Using where”。对于修改后的最终版本进行测试,原来的语句执行需要1.00s,优化后0.00s。

相关文章

  • like 优化---反向索引,合并索引

    背景 业务操作的场景有很多需要数据进行模糊查询,这个时候就会用到关键字"like",虽然这样对用查询东西比较方便,...

  • Oracle 索引学习

    创建索引 标准语法 唯一索引 组合索引 反向键索引 示例 删除索引 修改索引 重建索引 联机重建索引 合并索引

  • oracle 索引——like生效

    1.like 关键字 2.oracle like '%XXX'生效——反向索引

  • ElasticSearch初识(二)

    什么是正向索引、什么是倒排索引? 正向索引(forward index),反向索引(inverted index)...

  • Mysql索引查询失效的情况

    MySQL索引失效的几种情况 1、like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。 2、...

  • mysql的优化总结(二)

    二。sql语句的优化 1)可以适当的添加索引 但是要注意引起索引失效的几种情况 1>like条件 模糊查询 两个%...

  • MySQL,必须掌握的6个知识点

    目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 ...

  • 索引与优化like查询

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

  • 什么是倒排索引

    什么是倒排索引? 维基百科:倒排索引(英语:inverted index),也常被称为反向索引、置入档案或反向档案...

  • python索引原理

    python能够反向索引,从最后一个开始(正向索引是从左边开始计算,反向索引是从右边开始计算),一般来说,负的索引...

网友评论

    本文标题:like 优化---反向索引,合并索引

    本文链接:https://www.haomeiwen.com/subject/kbsytxtx.html