企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 宽索引 在三星索引中,第三颗星要求(索引行包含查询语句中所有的列),也就是常说的宽索引。 这颗星很好达到,又很难把控。或者说,为了达到这颗星,是否应该把所有的列都设计到索引列里面? 如果每个索引中包含表的所有列,首先能带来的优势是,匹配到的sql查询更多,查询到的数据不用在进行聚簇索引查询,节省了随机IO。 但劣势也很明显,长列索引会造成频繁的page split 和 page merge ,每个page能够存入的索引数据更少,而且会有更多的 page split,这对插入和查询来说,效率都会降低不少。 那我们应该怎么做,我们要回顾索引设计的本心,设计索引是为了方便查询的,而不是只为设计索引,脱离了查询的索引设计,并不高效。 宽索引要求我们尽量包含多的列在索引中,并不是所有,所以除了针对where 后的常用谓词,我们要设计索引以外,我们还得为常用select 后面的谓词,加入到索引,以加快查询速度