MySQL优化(三.建立索引)

建立索引

常见误区

1.所有的常用列都建立索引(索引越多越好)

因为建立的是独立索引,所以实际只有一个索引发挥作用,建议建立多列索引

2.建立多列索引,当查询某一列时索引都会产生作用,

多列索引的使用需要满足左前缀原则

3.重复索引与冗余索引,

有时候为了某些查询频繁的表的一些特殊业务请求,可以多设计一些冗余索引使查询速度更快,但是,不是重复索引
例如以下的三个索引
一:类别,品牌
二:类别,价格
三:类别,品牌,价格
其中索引一与索引三重复(左前缀原则),索引二与索引三冗余,所以我们应该保存冗余索引,去除重复索引,结果为
一:类别,价格
二:类别,品牌,价格



建立原则

1.在使用频繁的列上建立索引
2.区分度高

例如一张用户表,在性别上建立索引则对应了近50%的数据,意义不大
在年龄上建立索引每一个年龄也对应太多数据,意义不大
应该在身份证号上建立索引,没一个索引对应一条数据,

3.长度尽可能短

例如有一张中国常用词语表,在这张表上面建立索引
当我们以常用词语的第N个字作为索引时,索引效率如下

选取的字的个数 效率
1 0.0291
2 0.5865
3 0.9449
4 0.9876
5 0.9982
6 0.9998

此时我们选择3 - 4个字作为索引时较优



多列索引的建立原则

1.列的使用频率
2.列的区分度
3.列的查询顺序(左前缀原则)

例如去京东购买一台笔记本,
第一步: 登陆京东首页,京东不会让你去根据价格筛选等等,而是让你去选择商品类别(电子产品,文具用品,母婴用品等)
第二步: 笔记本中去选择相应的笔记本品牌
第三步: 才会让你根据价格,销量等去筛选

据此我们建立多列索引时,第一步确定需要索引的列,商品类别,商品品牌,商品价格等(第一二条原则),确定后,根据业务查询的流程,以及客户的购买习惯,我们可以建立索引如下(顺序不能错)(第三条原则)
一:类别,品牌
二:类别,价格
三:类别,品牌,价格
因为第一条索引与第三条索引的前半部分完全一样,所以删除第一条(左前缀原则),所以最终设计得到索引为
一:类别,价格
二:类别,品牌,价格



小技巧

现在给这样一个表加上索引

id url
1 http://www.baidu.com
2 http://www.imooc.edu

据观察所得,url的前11位一致为http://www.后几位也基本一致只有.com, .edu .cn等几种情况
初略优化
使用倒序存储网址,即

id url
1 moc.udiab.www//:ptth

这样虽然后4位重复的可能性也很大,但是基本达到索引效果
进一步优化
使用伪hash,给原表增加一列

id url hash
1 http://www.baidu.com -7456412318412313
2 http://www.imooc.edu -4596132123185653

使用crc函数会类似MD5生成一个32位的整数,在40亿数据内重复性不大,给这一列加上索引会有很好的效果

猜你喜欢

转载自blog.csdn.net/qq_38052995/article/details/82985472