暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库索引建立的小细节

分享儿 2022-12-03
141

关于

这篇主要写写数据库索引的问题。

起因

因为项目中涉及到大量的数据库搜索操作,搜索的语句都较为复杂,涉及多个条件,所以在实际测试的过程中,能够发现每次搜索的时间都比较长,而且CPU占用十分高。

所以,我就在想如何降低搜索时间,保证整个过程耗费资源较小。当时受到高人指点,可以使用数据库索引,我当时就试了一下,发现确实快了很多。

因为不太明白索引的具体原理,所以后面我就花了些时间单独研究了一下如何建立索引。

数据库索引建立

首先,要明确一个问题,建立索引是为了什么目的?当然是为了提高sql语句的搜索速度。

那么想要提高速度的sql语句的组成是什么样子的?这个组成主要看where之后的部分,就是搜索的条件,即条件涉及到哪些列。

明确了具体的列后,需要对每列的属性进行了解,即该列包含的不同的值的数量。在行数固定的情况下,这个数量越大,则每个值对应的行数就越小,那么就会方便进行搜索。

这里补充数据库索引建立的一些原理:

create index myindex on mytable (a,b,c)

如建立(a,b,c)三列的索引,这里的顺序不是随机的,就是从左到右的顺序。但是,在where后的列的顺序关系并不会影响使用这个索引,因为数据库底层会对sql语句优化。

在数据库中,我们请求建立这样的索引,数据库会优先以最左边的列开始建立,建立的索引组会是:{(a), (a,b), (a,b,c)}。所以,都会以a列作为第一个搜索的列。

回到之前说到的每列包含不同值的数量,如果我们where后就是a,b,c三列,那么可以把包含不同值数量最大的列放到最左边,然后递减排序。当然,这是在每列都只匹配一个值的条件下,即"="匹配,相对而言,"="匹配会比其它方式的筛选更快,建议优先选择。

为什么这样做?因为在索引工作过程中,第一列会优先筛选,在其它条件相同时,该列筛选后的总列数就会更少,那么在这个基础上,继续做后面的筛选工作,可以加快整体的搜索速度。

通过这样的建立方式,可以大大提高搜索的效率,加快搜索过程。

总结

本文主要介绍了如何根据sql语句对数据库建立索引提高搜索速度,希望能够帮到有需要的朋友。


文章转载自分享儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论