索引
1.给字符串加索引
1.1 直接创建完整索引。缺点:占空间
1.2 创建前缀索引,节省空间。缺点:会增加查询扫描次数,且不能使用索引覆盖。
1.3 倒序存储,再创建前缀索引,可以绕过字符串本身前缀的区分度不够的问题。缺点:只能等值查询,不能范围查询,并且倒序函数 reverse()函数会额外消耗cpu资源。
1.4 创建hash字段索引,查询性能稳定。缺点:有额外的存储(多了一个字段)和计算消耗(crc函数),不支持范围查询。
以上,实际业务中,根据不同需求,选择合适的方式。
自增主键 满足了递增插入 每次插入一条新纪录,都是追加操作,都不涉及到挪动其他记录,也不会触发叶子节点的分裂 底层来看 不会造成页分裂
主键长度越小 ,普通索引的叶子节点就越小,普通索引占用的空间也就越小
select * from t where k between 3 and 51
回表优化:覆盖索引;索引下推 5.6及之后 (mysql 5.6引入)
索引下推:在索引遍历过程中,对索引中包含的字段先做判断,直接过滤调不满足条件的记录,减少回表次数
explain中的extra字段里会说明索引使用情况:using index:表示只用到了二级索引,即索引覆盖;Using index condition:表示用到了索引下推;Using where:表示用到了全表扫描;Using intersect(…)、Using union(…)和Using sort_union(…):表示使用到了索引合并。