加入收藏 | 设为首页 | 会员中心 | 我要投稿 上海站长网 (https://www.021zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 搜索优化 > 正文

2 mysql索引优化分析

发布时间:2023-02-04 18:10:41 所属栏目:搜索优化 来源:转载
导读: Q1: mysql 的三范式记录的属性是原子性的,不可再分

image.png
我们发现此时的成绩一栏是可以进行拆分的,可以拆分为科目+分数,不符合范式1,修改后:

image.png
记录的属性不可有部分

Q1: mysql 的三范式记录的属性是原子性的,不可再分

image.png

我们发现此时的成绩一栏是可以进行拆分的,可以拆分为科目+分数,不符合范式1,修改后:

image.png

记录的属性不可有部分依赖,前提是存在联合主键索引;一般不用联合的主键索引,而是用唯一的主键。

image.png

如果我们用学生和班级建立联合索引mysql 模糊搜索 优化,则属性科目仅仅与学生有关,而与科目无关,产生了部分依赖。修改为添加为自增主键

image.png

属性不依赖其他非主属性

上面我们明显可以看到成绩依赖于科目,而跟主键没有什么关系,所以我们可以请科目及成绩进行拆分

student.png

score.png

Q2:正确的使用索引

1.前置模糊搜索,数据库引擎会放弃索引,进行全表扫描,而后置查询可以正常使用索引:

应用场景:web端的模糊检索

image.png

image.png

【待考证】负向条件查询不可使用索引:也要看数据范围的哈(> 和 < 要看数据范围)

!=、、not in、not exists、not like

image.png

image.png

image.png

image.png

image.png

强制类型转换会导致全表扫描

`s_mobile` varchar(20) NOT NULL DEFAULT '0' COMMENT '手机号',

image.png

使用字符串类型查询就可以使用索引

image.png

联合索引最左原则

(a) 建联合索引的时候,区分度最高的字段在最左边。

(b) 如果建立了(a, b)联合索引,就不必再单独建立 a 索引。同理,如果建立了(a,b,c)联合索引,就不必再单独建立 a、(a,b) 索引。

(c) 存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>? and b=?,那么即使 a 的区分度更高,也必须把 b 放在索引的最前列。

(d) 最左侧查询需求,并不是指 SQL 语句的 where 顺序要和联合索引一致。建立索引的列不允许为NULL,一般指定空字符串,或默认数值

6.如果明确知道只有一条结果返回,limit 1 能够提高效率

(编辑:上海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!