索引设计原则

1.被频繁使用的字段设置索引
字段被频繁用在where 和order 等条件里面
数据表创建完毕,要预估那些字段被经常使用,就给其创建索引
2.执行时间长的sql 语句考虑设计索引
可以利用“慢查询日志”收集这样的sql 语句并优化设计索引
3.逻辑非常重要的sql 设计索引
例如商城系统里面,会员给自己账户充值就比较重要。
还有会员下订单购物,进行付款的时候也比较重要。
4.字段内容足够花样化,可以考虑设计索引
例如性别,不适合做索引

前缀索引

如果一个字段的内容的前面的n位信息已经足够可以标识当前的字段内容,就可以把字段的前n位获得出来并创建索引,通过字段内容前n位创建的索引就称为前缀索引
优点:索引占用的物理空间比较小,这样的索引运行速度快,效率高,对mysql 整体性能提高有很大帮助。

alter table 表名 add key(字段(位数)) 

要先提前确定,是前几位可以标志当前内容。
获取字段的前n位:substring(字段,开始位置(从1开始),结束位置(从1 开始)

select count(*)/count(distinct substring(字段,startIndex,endIndex))from 表名 

这里写图片描述
根据以上计算,可以考虑索引位数信息。可以设置索引。

全文索引

什么是全文索引:
其它索引是把字段的内容作为一个整体进行索引设计,全文索引,类似我们有一篇作文,把作文其中的一些关键字给获取出来当成索引内容。
具体理解,就是做like 模糊查询
把简介中的一些关键字单词获取出来,制作索引。
这里写图片描述
全文索引注意:
1.字段类型必须位varchar/char/text 类型
2.mysql 5.6.4 之前只有Myisam 支持,之后则Myisam 和innodb 都支持
3.mysql 中的全文索引目前只支持英文(不支持中文),如果需要支持中文可以使用sphinx
4.现实生成中mysql 的全文索引不常使用,sphinx 常使用
mysql 全文索引自作聪明,对关键词有自己的考虑
创建全文索引

创建索引:alter table t_user_auth
add FULLTEXT 
index index_crad_no (crad_no);
删除索引: 
alter table t_user_auth
drop    index  index_crad_no 

全文索引查询是要特殊处理的:

select * from t_user_auth where   
crad_no like '%1234%'

select * from t_user_auth where   
match(crad_no) against('1234')

复合全文索引

创建复合全文索引:

alter table t_user_auth add fulltext index real_name_and_status (real_name,status);

查询复合全文索引:

select * from t_user_auth where match(real_name,status) against('1,2');

猜你喜欢

转载自blog.csdn.net/u013043762/article/details/80182946