【索引】联合索引的执行

情境设计:


      微博的关注,比如userID是很普通的用户,而一些明星是follerID用户,现在有三种查询条件,分别是查找普通用户关注了那些大咖,哪些大咖被关注,哪一个用户关注了哪一个大咖,该怎么写sql语句?该怎么用索引

 

    Select follerID from t_user where userid='1111'  

     Select userid from t_user wherefollerid='33333'

     Select * from t_user where userid='1111'and follerid='3333'

 

     因为普通用户是最多可以关注100个其他人的,而大咖被多少人关注是没有限制的 ,所以 我们可以建立2个索引

 

联合索引: userid  + follerid

单个索引:follerid


     为什么需要建立2个索引就够了?而不是三个索引(2个单个索引,一个联合索引)呢?

 

     在mysql执行查询的时候,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。最左前缀:顾名思义,就是最左优先。


      注意:创建联合索引 userid  + follerid的时候,就已经相当于创建了一个userid的单个索引和创建了一个 userid  + follerid的联合索引了。

再比如:联合索引 userid+follerid+roleid,那么这就相当于创建了一个单索引 userid,一个联合索引:userid+follerid,一个联合索引 userid+follerid+roleid

 

     优缺点比较:

    1):索引所占用空间:单一列索引相对要小.

    2):索引创建时间:单一列索引相对短.

    3):索引对insert,update,delete的影响程序:单一列索引要相对低.

    4):在多条件查询时,联合索引效率要高.

        索引的使用范围:单一列索引可以出现在where 条件中的任何位置,而联合索引需要按一定的顺序来写.

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值