zoukankan      html  css  js  c++  java
  • MySQL数据库order by 奇慢无比

    今天遇到个奇葩的问题,

    sql 数据量很大 有where 和order by,不加order by 速度很快,加了就很慢

    一、首先我们对这条sql执行查询计划:

     explain select t.order_id from book_order t  ORDER BY t.order_id desc 

    explain select t.order_id from book_order t 

     

    这条语句应用的索引是idx_bo_order_book_local

    进一步确定,再对使用where条件后,索引变成了主键。

    explain select t.order_id from book_order t where t.order_id = 1593539

    通过以上的情况可以看出:

    MySQL默认的查询(没有where条件),不一定使用主键,由于MySQL的每一条简单查询只应用一个索引,所以,这个时候使用order by 主键,主键的索引功能失效。

    二:解决办法

    1、order by 索引(where条件中引用的索引)。

    2、强制使用主键:FORCE INDEX(PRI),如果想强制使用索引,则用FORCE INDEX(索引名)。

     explain select t.order_id from book_order t FORCE INDEX(idx_bo_order_book_local) ORDER BY t.order_id desc;

     三、其他order by 索引失效的原因分析

    1、MySQL每天一条简单语句只应用一个索引,所以order by的字段要在索引之中,并且和where条件可以合并成组合索引。

    2、select的字段,必须是索引字段。(主键查询除外)

    3、如果sql语句为复合语句,包含子查询等,可以把语句分解成简单查询来分析。

  • 相关阅读:
    mysql一个字段多个值如何分别取出这些值
    mysql json数组取值、查询
    mui删除元素
    软件测试的艺术(读书笔记1)
    爬虫(3)_网站分析
    谈谈作为测试的8年
    测试有前景吗?
    爬虫(二)-创建项目&应用
    爬虫(一)-环境搭建
    puppeteer UI自动化测试demo(一)
  • 原文地址:https://www.cnblogs.com/yizhiamumu/p/9004550.html
Copyright © 2011-2022 走看看