索引设计原则

文章介绍了数据库索引设计的基本原则,包括先编写SQL再设计索引,尽量使用联合索引并覆盖查询条件,避免过多的单值索引。联合索引应遵循最左前缀原则,适用于WHERE、ORDERBY和GROUPBY的字段。对于长字符串,可以使用前缀索引以节省空间。在WHERE和ORDERBY冲突时,通常优先优化WHERE条件。文章还提到应基于慢查询进行优化,并提供了一个实际的优化案例。
摘要由CSDN通过智能技术生成

索引设计原则

代码先行 索引后上
尽量先把业务sql写完,根据sql来看看如何建索引
联合索引尽量覆盖条件
比如可以设计一个或者两三个联合索引(尽量少建单值索引,联合索引尽量覆盖 mysql一般只会选一个索引走,很多where可能只走一个,单值索引占用空间大),让每一个联合索引都尽量去包含sql语句里的where、order by、group by的字段,还要确保这些联合索引的字段顺序尽量满足sql查询的最左前缀原则。单值索引可以建唯一索引,不是为了速度,而是为了确保数据的正确,
不要在小基数字段上建立索引
性别这种不是男就是女的没啥用
长字符串我们可以采用前缀索引
很多时候你就是要针对varchar(255)这种字段建立索引,对于这种varchar(255)的大字段可能会比较占用磁盘空间,可以稍微优化下,比如针对这个字段的前20个
字符建立索引,就是说,对这个字段里的每个值的前20个字符放在索引树里,类似于 KEYindex(name(20),age,position)。此时你在where条件里搜索的时候,如果是根据name字段来搜索,那么此时就会先到索引树里根据name字段的前20个字符去搜索,定位到之后前20个字符的前缀匹配的部分数据之后,再回到聚簇索引提取出来
完整的name字段值进行比对。但是假如你要是order by name,那么此时你的name因为在索引树里仅仅包含了前20个字符,所以这个排序是没法用上索引的, group by也是同理。

where与order by冲突时优先where
一般这种时候往往都是让where条件去使用索引来快速筛选出来一部分指定的数据,接着再进行排序。因为大多数情况基于索引进行where筛选往往可以最快速度筛选出你要的少部分数据,然后做排序的成本可能会小很多。

基于慢sql查询做优化

https://note.youdao.com/ynoteshare/index.html?id=c71f1e66b7f91dab989a9d3a7c8ceb8e&type=note&_time=1681836163443

设计例子

看Mysql索引优化实战一那个pdf最后一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值