mysql中min和max查询优化

需求: 

在一个商城(前台/后台)统计查询 需要按照 , 最低或最高(最大/最小)查询销量, 价格, 库存, 评论数... ...的时候一般需要用到mysql中min或者max函数来解决.

但是往往min()或者max()函数往往会造成全表扫描. 那么如何快速查找出自己想要的数据呢, 请看我下面做的测试:

首先来看一下表结构:

CREATE TABLE `biggoods` (
  `goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `cat_id` int(10) unsigned NOT NULL,
  `goods_name` varchar(32) NOT NULL,
  `click_count` int(11) NOT NULL DEFAULT '0',
  `goods_number` int(11) NOT NULL DEFAULT '0',
  `is_delete` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`goods_id`),
  KEY `goods_cat_id` (`goods_id`,`cat_id`),
  KEY `cat_goods_id` (`cat_id`,`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=34143982 DEFAULT CHARSET=utf8 |

goods表中大概有三千万行数据



普通搜索(用min()): 



用时4.45毫秒


优化后的搜索:



用时0.00毫米


explain分析结果:

普通语句:


优化后的sql语句:



结尾:

通过explain清楚的看到普通sql语句和优化后的sql语句都进行了index索引扫描, 但是 优化后的sql语句在explain中的rows字段中显示只扫描了1行数据, 而普通语句确扫描了2012行数据. 这一切的缘由就是因为在查询中, 优化后的语句用order by进行排序(索引是自带排序功能的)后limit 1, 使其仅仅进行了1行数据的扫描
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值