首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL数据库原理学习(十九)

MySQL数据库原理学习(十九)

作者头像
用户1289394
发布2023-01-05 19:40:30
发布2023-01-05 19:40:30
3820
举报
文章被收录于专栏:Java学习网Java学习网

4). 索引设计原则

满足业务需求的情况下,尽量降低主键的长度。

插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键。

尽量不要使用UUID做主键或者是其他自然主键,如身份证号。

业务操作时,避免对主键的修改。

3.3 order by优化

MySQL的排序,有两种方式:

Using filesort : 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫 FileSort 排序。

Using index : 通过有序索引顺序扫描直接返回有序数据,这种情况即为 using index,不需要额外排序,操作效率高。

对于以上的两种排序方式,Using index的性能高,而Using filesort的性能低,我们在优化排序操作时,尽量要优化为 Using index。

接下来,我们来做一个测试:

A. 数据准备

把之前测试时,为tb_user表所建立的部分索引直接删除掉

代码语言:javascript
复制
drop index idx_user_phone on tb_user;
drop index idx_user_phone_name on tb_user;
drop index idx_user_name on tb_user;

B. 执行排序SQL

代码语言:javascript
复制
explain select id,age,phone from tb_user order by age ;
代码语言:javascript
复制
explain select id,age,phone from tb_user order by age, phone ;

由于 age, phone 都没有索引,所以此时再排序时,出现Using filesort, 排序性能较低。

C. 创建索引

代码语言:javascript
复制
-- 创建索引
create index idx_user_age_phone_aa on tb_user(age,phone);

D. 创建索引后,根据age, phone进行升序排序

代码语言:javascript
复制
explain select id,age,phone from tb_user order by age;
代码语言:javascript
复制
explain select id,age,phone from tb_user order by age , phone;

建立索引之后,再次进行排序查询,就由原来的Using filesort, 变为了 Using index,性能就是比较高的了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档