mysql中min和max查询优化

xiaoxiao2021-02-27  333

需求: 

在一个商城(前台/后台)统计查询 需要按照 , 最低或最高(最大/最小)查询销量, 价格, 库存, 评论数... ...的时候一般需要用到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行数据的扫描
转载请注明原文地址: https://www.6miu.com/read-3181.html

最新回复(0)