常见的手段,当该字段的值比较长的时候,存整体的话,B+树索引的节点内存不下几个,那么每个节点包含的记录数太少,会导致树太高,索引的效果会大打折扣,而且索引还会浪费更多的空间。但这个方式也要注意,找到合适的前缀长度,使其能较好地区分数据。
索引不是越多越好,在多个列上建立单独的索引可能并不会提升性能。同理建立了不恰当的联合索引也不会提升
这个通常有个经验规律:将区分度最高的列放到索引最前面。
不过注意,有些时候常见情况不能代表所有情况,会有特殊情况的存在。
狭义上理解就是主键索引,不过MyISAM和innoDB的略有不同
MyISAM的数据一行一行的,然后索引的树只记录对应的行号就行了
innoDB则是数据和聚簇索引放一起了
那这么看来,自然是innoDB按照顺序插入主键的话比较好,可以避免页的分裂等问题,直接插到尾部就行。但这并不是完美的,高并发环境下会导致竞争。
查询时候尽量只要必要且有用的,可以直接在二级索引叶子节点找到所需,不必回表,那省很多事情。当然现在有索引下推机制,好很多了。
索引的数据本来就有序,所以可以利用好这个,避免外部排序。多表关联时候ORDER BY的字段全部是第一张表时候才可以用索引代替排序。
可能有人不理解,但是其实有时候会不经意的发生下述情况,这三个分别是主键、唯一索引、索引,相当于一个ID三个索引,这就是索引重复:
索引冗余则是有了(A, B)还要再(A)。或者创建(A, ID),ID实际上在二级索引的叶子节点,没必要了。