情境设计:
微博的关注,比如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 条件中的任何位置,而联合索引需要按一定的顺序来写.