前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >老雷mysql教程之查询索引优化

老雷mysql教程之查询索引优化

作者头像
老雷PHP全栈开发
发布2020-07-02 14:46:06
1980
发布2020-07-02 14:46:06
举报
文章被收录于专栏:老雷PHP全栈开发

1.explain

代码语言:javascript
复制
  explain select * from sky_article where id>10 AND id<100 order by id desc
  explain select * from sky_district force index(upid)  order by upid desc ;

---------------------------------

id:1

select_type:SIMPLE 简单查询

table:null 查询的表

type: 显示连接使用了何种类型 由最差到最好

All、index、range、ref、eq_ref、const

possible_keys: 可能使用的列

key:决定采用哪个key

key_len:索引的字节数

ref:显示索引的列

rows:1 扫描行数

extra:返回索引列的描述 越来越差

using index where temporary filesort

------------------------------------

2.索引优化

为什么要用索引

1.索引减少了扫描行数

2.避免排序和临时表

3.将随机io变为顺序io

索引策略

独立的列 catid

多列索引 id catid orderindex

索引顺序 规则:从左往右 最左前缀 where id=1 order by orderindex

覆盖索引 选择的列都是在索引中 select id catid orderindex from table

使用索引扫描来做排序 索引的列选择 尽可能在where又在order

高区分的列 id catid orderindex

最多查询 应用中频繁用到的查询 catid gid orderindex 或者 catid status

gender age 地区 status //lasttime 频繁更新的索引

3.查询优化

1.减少从服务器获取额外数据

select * from sky_article 在列表页中不使用*

select id,catid,title,description from sky_article

2.使用覆盖索引查询

3.简单查询优化

代码语言:javascript
复制
    select id,catid,title,description from sky_article where id in(1,2,10) order by catid desc

切分查询操作

代码语言:javascript
复制
  delete from sky_article limit 10000
      select * from sky_article  limit 100;
      select * from sky_article  limit 1000000,100 order by id desc ;
      
      select * from sky_article id<max(id) limit 1

4.重构查询方式

尽可能让索引生效 减少数据库扫描行数

一个复杂查询还是多个简单的查询

left join 一条语句 实现 文章+蚊子分类

分解关联查询

代码语言:javascript
复制
      select * from tag
        join tag_post on tag_post.tagid=tag.id
        join post on tag_post.tagid=post.id
      where tag.tag='mysql'  

关联子查询优化

代码语言:javascript
复制
      select id,title from sky_post where  id in(select id from tag_post where tagdid=1)
      select id from tag_post where tagdid=1
      select id,title from sky_post where  id in(ids)

union 的限制

代码语言:javascript
复制
      select id from tag_post where tagdid=1
      limit 20
      union 
      select id from tag_post where tagdid=2
      limit 20
      limit 10

特定类型优化

count(*) count(1)

group by catid 和 distinct(catid)

limit

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老雷PHP全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档