• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql 优化(4)索引覆盖和最优索引

mysql 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

索引覆盖** 很重要的 一个概念 就是在索引上查找!!!

如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.

这种查询速度非常快,称为”索引覆盖”

非聚促索引 索引文件对应了数据要回行 浪费掉了时间

索引和数据区别

索引是高效组织起来的树 , 节点 ,查找树叶 结构更优于数据

索引可以被导入内存中进行查询

索引本身数据结构简单 再放入内存 很快很快

。。。。。。。。。结果一回行 就满了。。。我擦。。。

所以呢 如果建立两条索引 index( uid , aid)

如果在索引树上已经覆盖了你想要的数据 如 select uid from msg where aid = 1

索引已经覆盖了想要查的 则直接在内存中的索引取出来 速度效率都非常快 自然不用回行查找

最优索引:

查询频繁,区分度高 ,长度小

尽量覆盖常用字段 , ——》索引覆盖

左前缀不易区分 逆转url 把内容到过来 ; 左前缀区分度大

伪哈希 crc32() 函数 来唯一区分 crc32('http://wwww.baidu.com');给urlcrc 建索引 而不是去给url 避免了索引

学会 explain 来查看效果 ;

伪hash索引效果

同时存 url_hash列

create table t10 (id int primary key,url char(60) not null default '');
insert into t10 values (1,'http://www.baidu.com'),(2,'http://www.sina.com'),<div style="color:transparent">本文来源gaodai.ma#com搞#代!码(网</div>(3,'http://www.sohu.com.cn'),(4,'http://www.onlinedown.net'),(5,'http://www.gov.cn');alter table t10 add urlcrc int unsigned not null;

在sql存储时, crcurl== crc32(url),

因为crc的结果是32位int无符号数,因此当数据超过40亿,也会有重复,但这是值得的.

(索引长度为int4个字节)

多咧索引的设计

但从 商城的实际业务业务看, 顾客一般先选大分类->小分类->品牌,

最终选择 (1)index(cat_id,brand_id), + index(cat_id,shop_price)来建立索引

甚至可以再加 (3)index(cat_id,brand_id,shop_price),3个冗余索引 冗余字段 。。。

但(3)中的前2列和(1)中的前2列一样,再去掉(1)

index(cat_id,price) 和 index(cat_id,brand_id,shop_price); 也就是可以冗余 但是不能能重复 左前缀原则

以上就是mysql 优化(4)索引覆盖和最优索引的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql 优化(4)索引覆盖和最优索引

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址