mysql优化--索引降维
索引降维 我们mysql优化,一般采用建立索引的方式,来提高查询的速度,怎么在使用索引的情况下更高效的,充分的使用索引,追求极致,提高自己的查询速度。都知道在where子句中不要使用一些计算之类的语句,避免索引的失效。什么是降维? 一级级的筛选,一层层的过滤。举例:目前有一张活动记录表,基于微信开发,用户分享游戏链接,好友可以帮忙玩,累计分数。活动记录表记录用户的信息,业务要求查询某一个人的记
索引降维 我们mysql优化,一般采用建立索引的方式,来提高查询的速度,怎么在使用索引的情况下更高效的,充分的使用索引,追求极致,提高自己的查询速度。都知道在where子句中不要使用一些计算之类的语句,避免索引的失效。
什么是降维? 一级级的筛选,一层层的过滤。
举例:目前有一张活动记录表,基于微信开发,用户分享游戏链接,好友可以帮忙玩,累计分数。活动记录表记录用户的信息,
业务要求查询某一个人的记录,如何查高效。游戏很火爆,记录表达到千万条数据。
表结构:
pid 自增 active_id 活动id be_watered 参赛用户的uid 关键的几个字段。
注:active_id 是活动id,基于业务逻辑的可重用性,SASS平台,多家机构都可以创建活动,区分不同的活动的ID.
业务要求:查询 active_id 为 1 ,用户 uid 为 666 的游戏记录信息
1、select * from active_log where active_id = 1 and uid = 666
此sql 有没有毛病,很显然,没有任何毛病。但是不是最优的呢,在大数据量的时候,不是。
2、select * from active_log where uid = 666 and active_id = 1;
sql 语句1 和 sql 语句2 有没有区别,条件只不过调换了一下位置。显然,sql2 更高效。
为什么:
假设,活动 active_id 1 有10W条数据,uid 有100条数据。
那么,sql 1 的执行情况是 先查出来10w条,然后筛选100条数据返回。sql 2 就是直接找到uid 100条,实际上uid是自增的,不需要在筛选active_id。~~~~就是举这个例子,说明一下where子句的顺序,会影响到查询的效率,所以,在一层层的筛选中,我们应该尽可能的降低查询的条数,mysql解析器快速定位。
这个只是小例子,具体的实际的业务还是要使用explain 和 profiling 来分析。
我为人人,人人为我;美美与共,天下大同;
更多推荐
所有评论(0)