关于Mysql索引查询效率问题

查看:139
本文介绍了关于Mysql索引查询效率问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

SELECT COUNT(*) FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN ('0','2','21','22','27','11','31') AND `empty` = 0 LIMIT 1 [ RunTime:0.1423s ]
SELECT `id`,`webid`,`catid`,`path`,`pname`,`pathall`,`title`,`cdn`,`sort`,`likecount`,`fsize`,`time`,`viewcount`,`likecount` FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN ('0','2','21','22','27','11','31') AND `empty` = 0 ORDER BY time desc,id desc LIMIT 0,10 [ RunTime:0.0045s ]

两个sql语句 后面runtime是执行时间的意思 数据量是150W

字段说明 zhuanid是数值 webid是数值 empty是0或者1

第一句SQL使用的普通索引是 zhuanid webid empty的数的一组索引
第二句SQL使用的索引是zhuanid webid empty一组索引 time 与 id是一组索引

为什么第一句的count会消耗这么长的时间 相比第二句复杂的查询反而是很短的时间

解决方案

要看一下你的执行计划 第一条sql结果集很大的情况下是需要扫描所有符合条件的记录的 这种情况下第二条sql走time id的索引只需要找到10条满足条件的记录即可 所以会比较快 另外zhuanid webid empty的组合索引也只会使用到zhuanid列和webid的range部分 可以修改索引顺序为zhuanid empty webid

这篇关于关于Mysql索引查询效率问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆