mysql索引优化

1、不在索引列做任何操作:

函数表达式:select sum(id) from

计算:where id + 1;

隐式转换:where id + ""

2、尽量全值匹配(在联合索引中,where 后面的条件尽量和索引的所有列匹配);

where 后面的条件先后顺序与索引的字段顺序没关,查询优化器会调整顺存

3、遵守最佳左前缀法则;

当where 语句不能全值匹配时,也要遵守最佳左前缀法则;

index username,phone,status;

where phone,status -----不推荐

where username,phone -------推荐

4、范围条件放最后(也是针对联合索引)

<! >=

between and

中间也有范围查询,后面也有范围查询,则后面的范围查询索引会失效

where username=a and status>0 and starttime between and

5、尽量使用覆盖索引,覆盖select后的所有列,避免回表查询

不要使用select *

6、不等于要慎用;!=、>=、<=

7、is null和is not null也可以会导致索引失效

如果字段是非空,那么is null会导致索引失效?

如果字段不是非空(可以为空),is not null会导致索引失效?

8、字符串加引号(不加的话,mysql会自动加上,相当于对索引列做了操作,索引列会失效)

9、like条件查询

like "abc%" 索引不失效;

like "%abc" 索引失效,因为字符串排序,然后前面不确定,就会失效

10、使用or条件也可能会导致索引失效:,

order_no = 'aaa' or order_no='bbbb'; or前后字段一样,索引生效

order_no = 'aaaa' or status = 0; 字段不一样,其中一个没索引,则索引失效;优化:拆成两个select 语句,使用union all连接;

11、排序优化,ASC,DESC

order by 字段的顺序尽量和复合索引字段的顺序一致,否则会导致随机读取数据;

select * from table1,table2 order by只会按一个表排序

12、按主键顺序插入行

(主键不建议使用UUID)

13、count()优化:根据业务来

count(*) 统计的是所有行,包含为null的行;

count( email) 统计的是不包含null的行;

count(*)遍历数据,判断null,返回数据,累加

count(0)遍历数据,判断null,不返回数据,只累加

count(字段)遍历数据,判断null,为null的数据不返回,返回数据,累加

14、优化limit(深分页问题)

select * from table limit 10000,10;会进行全表扫描;使用子查询进行优化:

select * from

(select id from table limit 10000,10) t1;会走主键索引;但效果不明显;可以根据业务:如果id是有顺序的:

select * from where id> 10000 limit 10000,10;那么不会再扫描10000前的数据;

15、关于null值(有争议)不在where 语句中进行is null或is not null的判断

mysql认为:任何值与null比较都是null

优化:使用默认值

16、in 和not in也有可能会导致索引失效:使用exist代替in,或者使用子查询

相关推荐
CCIE-Yasuo3 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶3 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构
涛思数据(TDengine)3 小时前
从工业本体到 AI 原生:TDengine 出席 2026 QCon 分享工业数据基础设施路径
大数据·数据库·人工智能·tdengine·工业
Jesse_EC3 小时前
换乘次数最少的路径 SQL 查询详解与实战经验——从 WITH RECURSIVE 到 pgRouting
数据库·postgresql
工控丫丫3 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
这个DBA有点耶5 小时前
云数据库半夜卡顿,CPU才30%?深挖云盘IOPS突发限制与内核挂起机制
数据库·mysql·云原生
无言听风雨丶6 小时前
Redis 运维实战与排错
运维·数据库·redis
小天源7 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
herinspace8 小时前
管家婆实用贴-SQL 2008如何修改成混合模式
服务器·数据库·sql·管家婆软件·财务软件·合肥管家婆软件
打螺丝的小李8 小时前
制造企业质量管理系统的三类产品形态:分别解决什么问题
数据库·制造