Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1625|回复: 2
打印 上一主题 下一主题

mysql性能优化

[复制链接]

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
跳转到指定楼层
楼主
发表于 2017-9-9 16:13:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 firemail 于 2019-2-21 14:02 编辑

desc
复杂查询语句

根据查询结果创建相关索引

回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
发表于 2019-2-21 14:01:44 | 只看该作者
本帖最后由 java 于 2019-2-21 15:27 编辑

Explain关键字
1.表的读取顺序
2.数据读取操作的操作类型
3.哪些索引可以使用4.哪些索引实际被使用
5.表之间的引用
6.每张表有多少行被优化器查询

Explain + SQL


id  select_type  table type possible_keys key key_len ref rows Extra

id:相同从上往下执行,不同 越大越先执行
derived = 衍生

select_type:

Simple  Primary Subquery  Derived Union [Union result]

type: 访问类型
system > const >eq_ref >ref > rang >index > all
一般至少达到rang级别 最好达到ref级别







select * from ll;
show profiles;
show profile block io, cpu for query 8;



show status like "innodb_row_lock%";








回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
板凳
发表于 2019-4-29 20:33:46 | 只看该作者
影响sql查询慢的因素
1、没有索引或则无效索引导致的全表扫描。
2、表的数据量和关联的表数量。
致索引无效的情况
1、表关联查询时,字段类型或长度不一致。如:varchar(10)和varchar(20)
2、查询参数的数据类型与索引字段类型不一致。如int = '1313'
3、in () 索引字段in查询时,通常是有效的。但是当in中指定的数据太多,优化器认为全表扫描更快时,也不会使用索引。
4、其他如:like、索引上使用函数等使索引失效。
sql的执行顺序
from>join>on>where>group by>avg/sum>having>select>distinct>order by > limit
优化过程
优化的重点:使sql每一步筛选的数据更少,更快。
1、通过explain sql获取的信息:
第一个执行查询的表;索引的使用情况;每张表扫描到的数据条数;
2、通过select count(distinct cl)/count(1) from table,来查询关键查询字段的选择性。越大说明选择性越高,这种字段就应该优先建立索引。
3、analyze table 根据情况,分析table使其索引重建或则分布更加均衡。
4、如果查询优化后,反应出来的数据仍然很多,查询很慢。这时就应该根据业务来调整查询条件。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-5 22:08 , Processed in 0.063590 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表