Mysql优化整理(持续更新)

1.尽可能不使用OR,因为OR会导致数据库引擎放弃索引进行全表扫描。我们应该使用UNION

比如我们想要查询17岁和70岁的人,他就会有不同的查询方式

优化前:

select * from a where age =17 OR age =70

优化后:

SELECT * FROM a WHERE age = 17 UNION SELECT * FROM a WHERE age = 70

2.查询时where语句越左边放越苛刻的条件,因为Mysql是从左到右执行的,先过滤到多的数据,后面只是在少量数据中查询

举例: 假如是初中生,查询年龄是15岁,并且性别是男生。一般性别是55开或者46开,一般年龄差距在三岁之间,差不多该岁数会占三分之一。很明显根据年龄能排除更多的数据

select * from student where age = 15 and sex = '男'

3.避免进行空值判断,尽可能在插入时进行初值赋予,查询时判断初值

优化前:

select * from student where score is null

 优化后:

insert into student(name,....,score) values('小明',....,0)
select * from student where score = 0

4.在多表查询时,使用表别名,避免拿着列名去各个表匹配

select s.*,t.* from student s,teacher t where s.tid = t.id

5.模糊搜索尽量避开头搜索

select * from student where name like '王%'

6.尽量不适用select *

        ①减少不必要字段的查询,多余的字段只会浪费内存,给CPU增加不必要的麻烦,在网络交互时,也会增加麻烦。

        ②Mysql在处理大字段时(text,longtext,blob等等),会先把超出的数据序列化到另外一个地方,如果我们查询的字段中有不需要的字段,就会出现多一次I/O操作的情况。

        ③select *直接使得此次查询失去覆盖索引的可能性,简单的介绍一下覆盖索引:在我们进行查询时,会有一些索引,也就是我们where后面的条件,我们查询的规则时,现根据条件,查询符合规则的索引列,然后再查到想要的列的数据。但是当我们想要的数据和索引列相同时,就会舍去第二次那个查询数据的过程,提高我们查询的效率。

7.多表联查时,小表放前,大表放后,与2性质相同。Mysql都是从左向右查的,第一个表需要扫描全表,但是后续的表,会根据条件来查询部分数据。

8.避免使用uuid,尽可能使用自增整型当作主键。当使用uuid时,mysql会自己创建一个隐藏的自增整型。我们数据库的资源是很宝贵的,不要导致出现多余的字段。

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱分享的小邓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值