一、环境介绍

mysql版本:5.5.41-tokudb-7.5.5

表相关字段:

`jlbh` varchar(31) NOT NULL,

`hpys` varchar(1) NOT NULL,

`jgsj` datetime NOT NULL,

表相关索引:

KEY `index10` (`hpys`,`jgsj`,`jlbh`,`hphm`,`kkbh`,`clpp`,`clzpp`,`clsd`)

表引擎:TokuDB

统计信息已收集

二、SQL1

SELECT

jlbh,

kkbh,

hphm,

jgsj,

clsd

FROM

sjkk_gcjl s

WHERE

1 = 1

AND hphm LIKE '%77'

AND jgsj >= '2015-11-10 19:59:59'

AND jgsj <= '2015-11-10 23:59:59'

AND hpys = '2'

ORDER BY

jgsj DESC,

jlbh DESC

LIMIT 100;

5min以上还没有出结果

执行计划:

+----+-------------+-------+------+-------------------------+---------+---------+-------+---------+--------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+-------------------------+---------+---------+-------+---------+--------------------------+

| 1 | SIMPLE | s | ref | index04,index10,index14 | index10 | 5 | const | 2394655 | Using where; Using index |

+----+-------------+-------+------+-------------------------+---------+---------+-------+---------+--------------------------+

三、SQL2

SELECT

jlbh,

kkbh,

hphm,

jgsj,

clsd

FROM

sjkk_gcjl s FORCE INDEX(INDEX10)

WHERE

1 = 1

AND hphm LIKE '%77'

AND jgsj >= '2015-11-10 19:59:59'

AND jgsj <= '2015-11-10 23:59:59'

AND hpys = '2'

ORDER BY

jgsj DESC,

jlbh DESC

LIMIT 100;

100 rows in set (0.10 sec)

执行计划:

+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+

| 1 | SIMPLE | s | range | index10 | index10 | 13 | NULL | 2396575 | Using where; Using index |

+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+

疑问:

为啥使用了强制索引后,才key_len才会是13。有什么方法在不使用强制索引来让数据库自己走key_len为13?

四、做测试发现增大SQL中的时间范围,数据库会自己走SQL2中的执行计划。

下面第一个sql数据库默认走的和上面SQL1中的一样,但是只增大了查询时间范围,数据库就会走上面SQL2中的执行计划。

SELECT

jlbh,

kkbh,

hphm,

jgsj,

clsd

FROM

sjkk_gcjl s

WHERE

1 = 1

AND hphm LIKE '%77'

AND jgsj >= '2015-11-10 10:05:35'

AND jgsj <= '2015-11-10 14:05:35'

AND hpys = '2'

ORDER BY

jgsj DESC,

jlbh DESC

LIMIT 100;

5分钟不出结果...

+----+-------------+-------+------+-------------------------+---------+---------+-------+---------+--------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+-------------------------+---------+---------+-------+---------+--------------------------+

| 1 | SIMPLE | s | ref | index04,index10,index14 | index10 | 5 | const | 2397854 | Using where; Using index |

+----+-------------+-------+------+-------------------------+---------+---------+-------+---------+--------------------------+

SELECT

jlbh,

kkbh,

hphm,

jgsj,

clsd

FROM

sjkk_gcjl s

WHERE

1 = 1

AND hphm LIKE '%77'

AND jgsj >= '2015-10-01 14:05:35'

AND jgsj <= '2015-11-10 14:05:35'

AND hpys = '2'

ORDER BY

jgsj DESC,

jlbh DESC

LIMIT 100;

100 rows in set (0.10 sec)

+----+-------------+-------+-------+-------------------------+---------+---------+------+-----------+--------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+-------------------------+---------+---------+------+-----------+--------------------------+

| 1 | SIMPLE | s | range | index04,index10,index14 | index10 | 13 | NULL | 254032046 | Using where; Using index |

+----+-------------+-------+-------+-------------------------+---------+---------+------+-----------+--------------------------+

对上面第一个sql使用强制索引让其走第二个执行计划,也会很快。

SELECT

jlbh,

kkbh,

hphm,

jgsj,

clsd

FROM

sjkk_gcjl s force index(index10)

WHERE

1 = 1

AND hphm LIKE '%77'

AND jgsj >= '2015-11-10 10:05:35'

AND jgsj <= '2015-11-10 14:05:35'

AND hpys = '2'

ORDER BY

jgsj DESC,

jlbh DESC

LIMIT 100;

100 rows in set (0.11 sec)

+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+

| 1 | SIMPLE | s | range | index10 | index10 | 13 | NULL | 2397854 | Using where; Using index |

+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+

mysql 执行计划不对_mysql tokudb执行计划走的不准确案例相关推荐

  1. mysql查询解析过程_MySQL查询执行过程详解

    查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览.查询是一个独立的.功能强大的.具有计算功能和条件检索功能的数据库对象.MySQL数据库中,MySQL ...

  2. mysql 执行计划不对_MySQL执行计划显示与执行过程不符合

    一 建表和现象的过程如下 CREATE TABLE t1 (id1 INT, a1 INT, b1 INT, PRIMARY KEY(id1)); CREATE TABLE t3 (id3 INT U ...

  3. mysql 执行计划 代价_mysql explain执行计划详解

    1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A:simple:表 ...

  4. mysql e 执行文件夹_mysql -e 执行存储过程

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. mysql 默认密码不对_mysql初始化密码常见报错问题

    1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码 cat /var/log/mysqld.log | grep password 1 2,然后执行 mysql -ur ...

  6. mysql端口号不对_mysql 更改端口号踩的坑

    windows系统的配置文件在C:\ProgramData\MySQL\MySQL Server 5.7下的my.ini,怎么修改应该大家都知道,mysqld节点下的port更改为你想要的端口即可. ...

  7. mysql经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理

    MySQL基础篇(01):经典实用查询案例,总结整理 发布时间:2020-02-26 22:25:21 来源:51CTO 阅读:244 作者:知了一笑 本文源码:GitHub·点这里 || GitEE ...

  8. mysql悲观锁关键字_MySQL悲观锁 select for update实现秒杀案例(jfinal框架)

    MySQL悲观锁 select for update实现秒杀案例(jfinal框架) 发布时间:2018-08-17作者:laosun阅读(4287) 为了方便测试,博主使用最新的jfinal框架,里 ...

  9. mysql 定时脚本_MySQL定时执行脚本(计划任务)命令实例

    在mysql中我们可以直接进行一些参数设置让它成定时为我们执行一些任务了,这个虽然可以使用windows或者linux中的计划任务实现,但是mysql本身也能完成 查看event是否开启 复制代码 代 ...

最新文章

  1. python matplotlib模块画出的图像转换为.tiff格式
  2. linux无密码sudo,在Linux系统中运行没有sudo密码的特定命令
  3. Laravel-Action 对代码的改造
  4. Spring boot变量的初始化顺序
  5. python轮胎_如何用数据分析方法剖析途虎轮胎数据
  6. python中的画布背景设置_教你用python画图—Turtle详细教程
  7. React系列---Babel
  8. Silverlight --- Behavior技术(三)
  9. [转]用C++实现插件体系结构
  10. C++11 std::function类模板
  11. Pytorch实现GPU和TPU运算
  12. Jenkins之工作流程原理
  13. Python实用模块(二十四)tenacity
  14. IDEA标签栏多行显示设置
  15. VB6基本数据库应用(二):建立数据库
  16. Ipopt with Metis编译指南
  17. 徐无忌并发编程笔记:无锁机制CAS及其底层实现原理?
  18. ar1220e-s虚拟服务器,华为路由器AR1220E-S和华为AP3010 FIT模式与openportal对接教程
  19. 国科大学习资料--模式识别与机器学习(黄庆明)--第三次作业答案
  20. 王小二切饼 2050

热门文章

  1. 使用Masonry让cell高度自适
  2. leetcode解题笔记-Summary Ranges
  3. JAVA中的hasNextInt()方法多次调用只有一个结果的原因
  4. 从本地或网页加载图片
  5. [转载] 利用python制作简单计算器
  6. [转载] Python语言程序设计基础(第二版)嵩天等课后习题答案
  7. [转载] 【python】定义带参数的装饰器,用装饰器限制函数的参数类型
  8. [Active Learning] Multi-Criteria-based Active Learning
  9. 【pytorch】pytorch-LSTM
  10. Android Studio 创建不同分辨率的图标