Mysql慢查询优化示例

参考(https://blog.csdn.net/lr131425/article/details/61918741

  • 首先使用explain 看一下sql情况

CODE:SQL

select shd.loan_no as loan_no , shd.ps_due_dt as ps_due_dt, shd.ps_perd_no as ps_perd_no, lc.appl_cde as appl_cde, lc.id_no as id_no, lm.daifu_mer_no as mer_no , lc.md_loan_id as md_loan_id from glloans.lm_pm_shd shd left join glloans.lm_loan lm on lm.loan_no = shd.loan_no left join cmis.lpb_appl_dn dn on dn.loan_no = shd.loan_no left join cmis.lc_appl lc on lc.appl_seq = dn.appl_seq where shd.ps_due_dt<=? and shd.daishou_channel in(?+) and shd.setl_ind = ? and shd.ps_perd_no >?

当执行explain会发现shd表查询type类型是all效率最低的( system>const>index  > range>index_merge>ALL

发现其中where条件里面存在一个字段非索引 daishou_channel

修改之前查询所用时间平均0.15

添加索引之后;

CODE:SQL

show index from glloans.lm_pm_shd;

alter table glloans.lm_pm_shd add index idx_daishou_channel(daishou_channel);

alter table glloans.lm_pm_shd drop index idx_daishou_channel ;

添加之后所用时间0.08

后续...索引类型

从数据结构角度https://www.jianshu.com/p/8fd9de502547

1. B-Tree索引

最常见的索引类型,基于B-Tree数据结构。B-Tree的基本思想是,所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等。所以B-Tree适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)。但是当索引多列时,列的顺序特别重要,需要格外注意。InnoDB和MyISAM都支持B-Tree索引。InnoDB用的是一个变种B+Tree,而MyISAM为了节省空间对索引进行了压缩,从而牺牲了性能。

2. Hash索引

基于hash表。所以这种索引只支持精确查找,不支持范围查找,不支持排序。这意味着范围查找或ORDER BY都要依赖server层的额外工作。目前只有Memory引擎支持显式的hash索引(但是它的hash是nonunique的,冲突太多时也会影响查找性能)。Memory引擎默认的索引类型即是Hash索引,虽然它也支持B-Tree索引。

3. Spatial (R-Tree)(空间)索引

只有MyISAM引擎支持,并且支持的不好。可以忽略。

4. Full-text索引

主要用来查找文本中的关键字,而不是直接与索引中的值相比较。Full-text索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的WHERE语句的参数匹配。你可以对某列分别进行full-text索引和B-Tree索引,两者互不冲突。Full-text索引配合MATCH AGAINST操作使用,而不是一般的WHERE语句加LIKE。

 

从逻辑角度

1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值

2、普通索引或者单列索引

3、多列索引(复合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合

4、唯一索引或者非唯一索引

5、空间索引:空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值