mysql优化

本文围绕Mysql优化展开,涵盖索引、SQL语句和表的优化。索引优化强调避免在重复数据多的列设索引,避免对索引字段计算等;SQL语句优化建议避免SELECT *,用LIMIT 1等;表优化遵循三大范式,字段尽量用NOT NULL,还可分区分表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql优化

索引优化

  • 单列索引不存储null值,复合索引不存储全为null的值。索引不能存储null,所以对这列采用is null条件时,因为索引上根本没null值,不能利用到索引,只能全表扫描。(mysql可以 参考地址)
  • 不要再重复数据较多的列设索引
  • 对于经常在where子句使用的列,最好设置索引,这样会加快查找速度
  • 对于有多个列where或者order by子句的,应该建立复合索引
  • 在WHERE 语句中,尽量避免对索引字段进行计算操作,因为在索引列上计算会导致索引失效
  • 在join表的时候使用相当类型的例,并将其索引
  • 不建议使用%或者’-'前缀模糊查询 LIKE “%name”或者LIKE “%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。
  • 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引
  • 尽量不要对索引字段使用not in和<>操作,会导致索引失效
  • 如果条件中有or(多字段时),即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)要想使用or,又想让索引生效,只能将or条件所有字段建成复合索引

sql语句优化

  • 避免 SELECT *(增加网络传输的负载)
  • 当只要一行数据时使用 LIMIT 1
  • 优化的目标是尽可能减少JOIN中Nested Loop的循环次数,以此保证:永远用小结果集驱动大结果集
  • left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。
  • 多使用explain和profile分析查询语句
  • 对于经常使用的查询,可以开启缓存

表的优化

  • 遵循数据库三大范式
    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
    1)第一范式 如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式
    2)第二范式 实体中每一行的所有非主属性都必须完全依赖于主键 即:非主属性必须完全依赖于主键。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
    3)第三范式 实体中的属性不能是其他实体中的非主属性。 因为这样会出现冗余。即:属性不依赖于其他非主属性。也就是说每一列数据都和主键直接相关,而不能间接相关 ,数据不能存在传递关系
  • 表的字段尽可能用NOT NULL
  • 字段长度固定的表查询会更快
  • 分区分表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值