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数据库order by 奇慢无比的更多相关文章
- 50多条mysql数据库优化建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...
- php面试题之五——MySQL数据库(基础部分)
五.MySQL数据库 mysql_num_rows() mysql_affected_rows() 这两个函数都作用于 mysql_query($query)操作的结果,mysql_num_rows( ...
- MySQL数据库如何解决大数据量存储问题
利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开 ...
- mysql数据库优化(转)
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...
- 利用MySQL数据库如何解决大数据量存储问题?
提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如何做,对于一个存储设计,必须考虑业务特点,收集的信息如下:1.数据的容量:1-3年内会大概多少条数据,每条 ...
- Mysql数据库调优和性能优化
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常 ...
- Mysql数据库调优和性能优化的21条最佳实践
Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...
- MySQL数据库解决大数据量存储问题
转载自:https://www.cnblogs.com/ryanzheng/p/8334915.html 提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如 ...
- 为什么在MySQL数据库中无法创建外键?(MyISAM和InnoDB详解)
问题描述:为什么在MySQL数据库中不能创建外键,尝试了很多次,既没有报错,也没有显示创建成功,真实奇了怪,这是为什么呢? 问题解决:通过查找资料,每次在MySQL数据库中创建表时默认的情况是这样的: ...
随机推荐
- centos7升级Python版本后,yum不能正常使用
python升级方法,使用源码编译安装即可,prefix=/usr/local/bin/python3 执行yum list,提示/usr/bin/yum 报错 我是直接在Python2.7的基础上又 ...
- oracle使用一条语句批量插入多条数据
例如我有一个test表 create table (stuid int,name varchar(20); 插入多条数据,注意不能直接使用insert into test values(1,'a'), ...
- 使用ipns 为ipfs 系统自定义域名
ipns 可以帮助我们进行寻址操作,但是默认的hashid 还是太长,不好记忆,ipns 同时也支持 基于域名的解析,我们添加txt 记录就可以方便的解决ipfs 文件访问地址难记的问题,使用的是 一 ...
- TCP/IP option data aligement issue cause system broken
1 Problem Description The field reports show that xxx panel will lockup and then reboot while d ...
- oracle-sql模式匹配
下面是条件 like与regexp_like条件 下面是函数 regexp_instr regexp_replace regexp_substr select * from tis_ft_user_i ...
- Ubuntu server 运行.net core api 心得
1.安装.net core sdk 在微软.net core 安装页面找到linux 安装,按照步骤安装好 2.安装mysql 参考 Ubuntu安装mysql 3.配置mysql 1.需要将mysq ...
- 代理模式proxy
代理模式的共同优点如下: (1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度. (2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵 ...
- python列表(list)遍历
list = ['html', 'js', 'css', 'python'] 遍历列表方法1:for i in list: print("序号:%s 值:%s" % (list.i ...
- vim使用技巧大全
1.vim清空内容 光标移到第一行,然后在非插入模式按10000后然后点dd .要嫌笨的话就在非插入模式下输入:.,$d 一回车就全没了 2.vim光标跳转操作 1.跳到文本的最后一行:按“G”,即“ ...
- logback使用介绍
参考 https://www.cnblogs.com/warking/p/5710303.html