mysql性能优化

如何查询慢 SQL 产生的原因

l 分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。

l 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。

l 内存不足。 l 网络速度慢。

l 是否查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。

l 是否返回了不必要的行和列。

l 锁或者死锁。

l I/O 吞吐量小,形成了瓶颈效应。

l sp_lock,sp_who,活动的用户查看,原因是读写竞争资源

索引失效的情况有哪些?

l like 以%开头索引无效,当 like 以&结尾,索引有效。

l or 语句前后没有同事使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引 生效。

l 组合索引,使用的不是第一列索引时候,索引失效,即最左匹配规则。

l 数据类型出现隐式转换,如 varchar 不加单引号的时候可能会自动转换为 int 类型,这 个时候索引失效。

l 在索引列上使用 IS NULL 或者 IS NOT NULL 时候,索引失效,因为索引是不索引空值 得。

l 在索引字段上使用,NOT、 <>、!= 、时候是不会使用索引的,对于这样的处理只会进 行全表扫描。

l 对索引字段进行计算操作,函数操作时不会使用索引。

l 当全表扫描速度比索引速度快的时候不会使用索引

对 SQL 慢查询会考虑哪些优化 ?

l 分析语句,是否加载了不必要的字段/数据。

l 分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。

l 查看 SQL 涉及的表结构和索引信息。

l 如果 SQL 很复杂,优化 SQL 结构。

l 按照可能的优化点执行表结构变更、增加索引、SQL 改写等操作。

l 查看优化后的执行时间和执行计划。

l 如果表数据量太大,考虑分表。

l 利用缓存,减少查询次数。

性能优化的8种方法

一、设置索引

二、使用EXPLAIN 来查看你的 SELECT 查询

三、不要使用表达式作为查询条件

四、尽量使用in运行符来替代or运算   子查询表大的用exists,子查询表小的用in

In用的是主表上的索引,exists用的是子表上的索引

五、条件列表值如果连续使用between替代in

六、无重复记录的结果集使用union all合并

七、使用like操作符时通配符要放在右侧

八、数据库怎么优化查询效率?

分表分库,主从。

对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫

应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描

Update 语句,如果只更改 1、2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志

对于多张大数据量(这里几百条就算大了)的表 JOIN,要先分页再 JOIN,否则逻辑读会很高,性能很差。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值