zoukankan      html  css  js  c++  java
  • force index强制使用指定索引

    问题:对于一个8000w数据量并有索引的表进行查询,查询了5分钟才查询出结果

    产生问题的原因:索引失效。 数据表中数据量非常大,而查询条件只有时间区间。(因为是>= 和 <= 无法使用索引

    SELECT 字段一, 字段二, 字段三, 字段四, 字段五, 字段六
    FROM 表一 INNER JOIN 表二 ON 关联条件 INNER JOIN 表三 ON 关联条件 INNER JOIN 表四 ON 关联条件 
    WHERE  表一.created >= '2019-07-09 00:00:00' AND 表一.created <= '2019-07-30 23:59:59' ORDER BY 表一.created DESC

    执行explain,发现该查询检索了全表8000w的数据。

    如上图索引失效,并未使用created字段作为查询索引,而是一个联合索引对查询优化并无作用。 造成索引失效的原因有哪些,请看这表文章()

    force index(表一_字段)
    SELECT 字段一, 字段二, 字段三, 字段四, 字段五, 字段六
    FROM 表一 force index(表一_字段) INNER JOIN 表二 ON 关联条件 INNER JOIN 表三 ON 关联条件 INNER JOIN 表四 ON 关联条件 
    WHERE 查询条件一 AND 查询条件二(表一.created >= '2019-07-09 00:00:00' AND 表一.created <= '2019-07-30 23:59:59') ORDER BY 表一.created DESC

    添加了强制索引后再执行explain,这次只检索了满足查询条件的110w条数据。

    如图,这次就使了created字段作为索引。查询的数据量明显减少,并且使用了created字段作为索引。

    注意:mysql优化器会计算出一个合适的索引,但是这个索引不一定是最好的。force index()指令可以避免MySql优化器用到了一个低效的索引。
  • 相关阅读:
    转:wap1.1和wap2.0的比较~
    转:alidateRequest=false 在.Net 4.0 中不管用
    ASP.NET页面实时进行GZIP压缩优化
    转:WAP1.0 和 WAP2.0 支持的标签区别
    [转载]利用vs.net快速开发windows服务(c#)
    CSS3选择器
    AD10 多层板设计错误解决
    ASP如何获取客户端真实IP地址
    javascript模拟滚动条实现代码(3)
    最近工作中的小细节
  • 原文地址:https://www.cnblogs.com/changdasheng/p/11281498.html
Copyright © 2011-2022 走看看