索引降维   我们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 来分析。


我为人人,人人为我;美美与共,天下大同;


Logo

更多推荐