未建索引

mysql> alter table modulestatus drop index imei;
Query OK, 457922 rows affected (4.29 sec)
Records: 457922 Duplicates: 0 Warnings: 0

mysql> SELECT count(*) from modulestatus where imei like '1%';
+----------+
| count(*) |
+----------+
| 270 |
+----------+
1 row in set (0.53 sec)

mysql> SELECT count(*) from modulestatus where imei like '%1';
+----------+
| count(*) |
+----------+
| 35499 |
+----------+
1 row in set (0.66 sec)

mysql> SELECT count(*) from modulestatus where imei like '1%' and '9%';
+----------+
| count(*) |
+----------+
| 270 |
+----------+
1 row in set, 1 warning (0.49 sec)

建立索引

mysql> alter table modulestatus add index (imei);
Query OK, 457922 rows affected (31.67 sec)
Records: 457922 Duplicates: 0 Warnings: 0

mysql> SELECT count(*) from modulestatus where imei like '1%';
+----------+
| count(*) |
+----------+
| 270 |
+----------+
1 row in set (0.04 sec)

mysql> SELECT count(*) from modulestatus where imei like '%1';
+----------+
| count(*) |
+----------+
| 35499 |
+----------+
1 row in set (0.80 sec)

mysql> SELECT count(*) from modulestatus where imei like '1%' and '9%';
+----------+
| count(*) |
+----------+
| 270 |
+----------+
1 row in set, 1 warning (0.00 sec)

结论

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

2、like keyword%:索引有效。

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

未建索引

mysql> SELECT count(*) from modulestatus where imei like '%1%';
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.73 sec)

mysql> SELECT count(*) from modulestatus where locate('1',imei);
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.76 sec)

建立索引

mysql> alter table modulestatus add index (imei);
Query OK, 457922 rows affected (11.06 sec)
Records: 457922 Duplicates: 0 Warnings: 0

mysql> SELECT count(*) from modulestatus where imei like '%1%';
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.93 sec)

mysql> SELECT count(*) from modulestatus where locate('1',imei);
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.95 sec)

结论

LOCATE(str,colum)函数,可以代替column like '%str%',但效率并没有明显的差别。

建立索引后,都会减慢like '%str%' 与locate(str,colum)函数查询的速度。

未建立索引

mysql> SELECT count(*) from modulestatus where imei like '%1%';
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.73 sec)

mysql> SELECT count(*) from modulestatus where instr(imei,'1');
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.79 sec)

建立索引

mysql> SELECT count(*) from modulestatus where imei like '%1%';
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (1.00 sec)

mysql> SELECT count(*) from modulestatus where instr(imei,'1');
+----------+
| count(*) |
+----------+
| 326019 |
+----------+
1 row in set (0.84 sec)

结论

instr(colum,str)函数,可以代替column like '%str%',但效率并没有明显的差别。

建立索引后,都会减慢like '%str%' 与instr(colum,str)函数查询的速度

未建立索引

mysql> SELECT count(*) from modulestatus where imei like '%1';
+----------+
| count(*) |
+----------+
| 35499 |
+----------+
1 row in set (0.90 sec)

mysql> SELECT count(*) from modulestatus where reverse(imei) like reverse('%1');

+----------+
| count(*) |
+----------+
| 35499 |
+----------+
1 row in set (0.70 sec)

建立索引

mysql> alter table modulestatus add index (imei);
Query OK, 457922 rows affected (10.04 sec)
Records: 457922 Duplicates: 0 Warnings: 0

mysql> SELECT count(*) from modulestatus where imei like '%1';
+----------+
| count(*) |
+----------+
| 35499 |
+----------+
1 row in set (1.06 sec)

mysql> SELECT count(*) from modulestatus where reverse(imei) like reverse('%1')

+----------+
| count(*) |
+----------+
| 35499 |
+----------+
1 row in set (0.84 sec)

结论

1、建立索引,会降低like '%str'和reverse(column) like reverse('%str′)的查询速度。

2、不管是建立索引,还是没有建立索引,reverse(column) like reverse('%str′)都要比column like '%str'要快。

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

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

索引与like优化的更多相关文章

  1. 浅谈B+树索引的分裂优化(转)

    http://www.tamabc.com/article/85038.html 从MySQL Bug#67718浅谈B+树索引的分裂优化   原文链接:http://hedengcheng.com/ ...

  2. 面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程

    上星期写了一个篇文章,数据库方面的面试技巧,如何从建表方面展示自己能力,承蒙管理员抬举,放入首页,也承蒙各位厚爱,两天内收获了将近770个点击,也一度进入48小时热榜. 为了感谢管理员和大家的支持,再 ...

  3. MySQL 如何创建索引?怎么优化?

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...

  4. Oracle 学习总结 - 表和索引的性能优化

    表的性能 表的性能取决于创建表之前所应用的数据库特性,数据库->表空间->表,创建数据库时确保为每个用户创建一个默认的永久表空间和临时表空间并使用本地管理,创建表空间设为本地管理并且自动段 ...

  5. Mysql 索引原理及优化

    本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接. 一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引 ...

  6. MySQL索引类型,优化,使用数据结构

    工欲善其事必先利其器 半藏说道:“若你在路途中遇到上帝,上帝也会被割伤.” 一.mysql 索引分类(默认使用B树结构)在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 My ...

  7. (转)Mysql 索引原理及优化

    本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接. 一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引 ...

  8. 基于索引的MySQL优化

    今天查看MySQL慢查询日志,查看一个四表关联的SQL操作,耗时1006s.这次也是基于基于子查询的思路,对上表进行优化.使时间复杂度降到n^2级别.但优化之后时间反而是原来的三倍多. 原SQL语句: ...

  9. MySQL索引类型及优化

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  10. 好书推荐之Mysql三剑客 :《高性能Mysql》、《Mysql技术内幕》、《数据库索引设计与优化》

    Mysql三剑客系列书籍: 大佬推荐 首先推荐<高性能 MySQL>,这本书是 MySQL 领域的经典之作,拥有广泛的影响力.不但适合数据库管理员(DBA)阅读,也适合开发人员参考学习.不 ...

随机推荐

  1. [转]SendKeys.Send 方法

    SendKeys.Send 方法 向活动应用程序发送击键. 转载自: https://msdn.microsoft.com/zh-cn/library/system.windows.forms.sen ...

  2. CSS 标签实例二

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Access restriction: The type Resource is not accessible due to restriction on required library

    方法一: 全局属性Project>preferences>java>Compiler>Errors/Warnings>把右侧的[Deprecated and restri ...

  4. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

  5. word2vec 的理解

    1.CBOW 模型 CBOW模型包括输入层.投影层.输出层.模型是根据上下文来预测当前词,由输入层到投影层的示意图如下: 这里是对输入层的4个上下文词向量求和得到的当前词向量,实际应用中,上下文窗口大 ...

  6. Web 项目遇到的乱码问题

    问题代码: jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  7. 文件系统性能测试--iozone

    iozone 一个文件系统性能评测工具,可以测试Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, ...

  8. HTML|CSS之前端入门

    知识内容: 1.计算机网络综述 2.web基础 3.HTML与CSS介绍 4.JavaScript与jQuery介绍 一.计算机网络综述 1.什么是计算机网络 计算机网络是指将地理位置不同.具有独立功 ...

  9. uva-331-枚举-交换的方案数

    题意:冒泡排序,最小交换数的前提下有多少用方案把数组变成从小到大的顺序, 注意: 3 2 1 3的下表是1  2的是2 1的是3  交换 3 2,那么第一个交换数是1 最小交换数=逆序数的和 那么,只 ...

  10. (4/24) webpack3.x快速搭建本地服务和实现热更新

    写在前面: (1)为了防止版本兼容问题,此处的webpack版本与之前的一致为:webpack@3.6.0.同时这里我们安装的webpack-dev-server版本是2.9.7版本. (2)之前已经 ...