前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库索引问题

数据库索引问题

作者头像
千往
发布2018-10-09 11:23:46
7210
发布2018-10-09 11:23:46
举报

# 背景

群上有一位同学咨询一个问题,两个查询语句,就一个limit 11, 一个limit 12,处理的效率相差巨大,如下图:

# 解决

原因就是因为limit不同,导致走了不同的索引

走的索引不一样,决定了要检索的数据量多少 1、当你要取的数据很少的时候,mysql认为走start_time的索引很快就能找够满足条件的数据,结果实际上满足条件的数据按照start_time倒序排列需要检索很多数据,所以会比较慢。 2、而当你limit20的时候mysql认为按照其他索引可能需要扫描很多的记录才能找到你要的结果,所以走了city_id的索引。 so这种情况你可以尝试一下按照start_time倒序排列后找两条最近的数据出来,按这些字段的值再去用limit 0,2检索看看是不是很快,如果是的话那就可以确定是这个原因。

一个类似的问题:https://segmentfault.com/q/1010000010707314

解决方法:

1. 强制使用一个索引,try,可以解决,但不够灵活

2. order by 后面的时间做个空运算,干扰下优化器,

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'; color: #000000} -->

date_sub(create_time, interval 0 day)

或者 

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'; color: #000000} -->

create_time+0

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'; color: #000000} --><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'; color: #000000} -->

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 背景
  • # 解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档