mysql order by 查询慢_mysql查询性能问题,加了order by速度慢了差不多50倍
基本情况:
数据表差不多有一千万条数据,用的是mycat分库。
数据表的里的索引有
PRIMARY id
AppName (AppName, custidStatus, channel)
建表语句如下
CREATE TABLE `eis_email_history` (
`id` bigint(20) NOT NULL DEFAULT '0',
`AppName` int(11) NOT NULL DEFAULT '0',
`emailto` varchar(256) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '收件人email',
`emailfrom` varchar(256) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '寄件人email',
`subject` varchar(256) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '邮件标题',
`content` text COLLATE utf8_unicode_ci NOT NULL COMMENT '邮件内容',
`sendtime` int(11) NOT NULL DEFAULT '0' COMMENT '发送邮件的unixtime',
`sendstatus` tinyint(4) NOT NULL DEFAULT '0' COMMENT '发件状态,0:发送队列中,1:已发送,2:发送失败,3:预制邮箱记录的邮箱暂时不可用',
`channel` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '来源渠道',
`AmazonOrderId` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '???',
`ASIN` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'asin',
`attachment` text COLLATE utf8_unicode_ci COMMENT '邮件附件,格式为,有多个附件的要分行记录,每行2个参数(以“tab制表符”+“/”+“tab制表符”分隔),第一个参数必选,为文件所在服务器路径,第二个参数为可选,如果输入第二个参数,那么附件名即为第二参数,否则就已文件本身名称为附件名',
`templateId` bigint(20) NOT NULL DEFAULT '0' COMMENT '模板Id',
`custidStatus` int(20) NOT NULL DEFAULT '0' COMMENT '差评Id',
PRIMARY KEY (`id`),
KEY `emailto` (`emailto`(255)),
KEY `sendtime` (`sendtime`),
KEY `sendstatus` (`sendstatus`),
KEY `emailfrom` (`emailfrom`(255)),
KEY `asin` (`ASIN`),
KEY `orderid` (`AmazonOrderId`),
KEY `AppName` (`AppName`,`custidStatus`,`channel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
首先是没有加order by的
SELECT
`id`,
`emailto`,
`channel`,
`AppName`,
`AmazonOrderId`
FROM
`eis_email_history`
WHERE `AppName` = 21
AND `custidStatus` IN (0, 1, 2)
AND `channel` = '***'
LIMIT 50
这个查询基本都是秒查询,然后explain的结果是:
然后是加了order by id desc的,
SELECT
`id`,
`emailto`,
`channel`,
`AppName`,
`AmazonOrderId`
FROM
`eis_email_history`
WHERE `AppName` = 21
AND `custidStatus` IN (0, 1, 2)
AND `channel` = '***'
ORDER BY id DESC
LIMIT 50
然后这个查询基本都在1分钟以上,explain结果如下,
看情况是加了order by导致where条件的索引没有使用而使用了主键扫描
mysql order by 查询慢_mysql查询性能问题,加了order by速度慢了差不多50倍相关推荐
- mysql查询过程从客户端发送查询请求_MySQL查询过程和高级查询
最近有个需求,要修改现有存储结构,涉及查询条件和查询效率的考量,看了几篇索引和HBase相关的文章,回忆了相关知识,结合项目需求,说说自己的理解和总结. 总体目录如下,上篇介绍了前3小节,分析了索引为 ...
- 查询排序_MySQL查询性能优化
MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下我们从数据库的索引和查询 ...
- mysql数据库查询缓存_MySQL查询缓存与数据库管理
MySQL查询缓存与数据库管理 上一篇 / 下一篇 2010-01-25 21:51:07 / 个人分类:MYSQL/Cache MySQL查询缓存 注意:查询缓存绝不返回过期数据. 如果一个表发生 ...
- mysql复杂连接查询语句_MySQL查询语句之复杂查询
软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...
- mysql是否有缓存区_Mysql查询高速缓存区
为了提高查询速度,Mysql会维护一个内存区域(官方文档指出,大小至少41984B)对查询结果进行缓存,当查询时发现缓存区里有数据则直接返回结果而不用去执行sql语句. 查询命中的条件 每个缓存查询至 ...
- mysql怎么查找列命令_MySQL查询命令-DQL
MySQL查询命令-DQL EMP //员工表 员工编号 员工名 岗位 领导 入职日期 工资 奖金 部门编号 +-------+--------+-----------+------+-------- ...
- mysql日志查询指令_MySQL查询日志总结
MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...
- mysql本周数据没有填充_MySql查询本周、本月、本年数据(没有数据则补全0)
最近写项目,发现有很多图表统计,需要查询本周.本月.本年数据.但是图表需要两个数组,一个日期数组,一个数据数组.然而数据库查询却只能查询出有数据的日期数据,所以找了很多资料终于能有补全日期和数据的方法 ...
- mysql 查询语句_MySQL查询语句之复杂查询
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.在MySQL中经常会有很多复杂的查询,为了节约大家的时间,小编总 ...
最新文章
- UIWebView之获取所点位置图片URL
- 跟我学Springboot开发后端管理系统5:数据库读写分离
- 全球最厉害的14位程序员!
- 获取PE文件的区段表
- 【SpringBoot】在普通类中获取spring容器中的bean
- superset出现A valid API access token is required to use Mapbox data
- 国内芯片60个细分领域重要代表企业【收藏】
- facebook 开源_Facebook开源主管开放
- 【转】vue项目重构技术要点和总结
- Apache是干什么的?
- Tungsten Fabric知识库丨构建、安装与公有云部署
- 机器学习_深度学习毕设题目汇总——图像分类
- 一个功能齐全的IOS音乐播放器应用源码
- lol 8.21服务器维护,《LOL》8.16版本维护到几点 8月21日更新维护内容汇总
- excel入门,如何玩转excel,你早该这么玩Excel笔记9
- 机器学习必知的八大神经网络架构
- Google推出免费DNS解析服务器【8.8.8.8】
- 高通骁龙765/骁龙765G芯片参数分析介绍
- acm测试题目数据生成
- 中职网络安全2021年国赛Wireshark流量分析题目解析