首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加快缓慢的查询速度?

如何加快缓慢的查询速度?
EN

Database Administration用户
提问于 2017-10-30 11:02:39
回答 1查看 90关注 0票数 2

我有一张鸽子数据表。

pigeon_id =鸽子的ID

date_time = signal_event的时间

pigeon_station =鸽子站的id

signal_strength =鸽子的信号强度

代码语言:javascript
复制
    CREATE TABLE `pigeon_signal` (
  `pigeon_id` varchar(20) NOT NULL,
  `date_time` int(11) DEFAULT NULL,
  `signal_strength` decimal(10,0) NOT NULL,
  `pigeon_station` varchar(20) DEFAULT NULL,
  KEY `index1` (`pigeon_id`,`pigeon_station`),
  KEY `index2` (`pigeon_id`,`date_time`,`pigeon_station`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

表数:500 000行

每只鸽子都有一个发射器。每隔几秒钟,鸽子站就会记录周围鸽子的信号强度。

我想问一下鸽子站第一次看到鸽子的时候。这是我的sql。它很慢,但是它返回正确的结果:

代码语言:javascript
复制
select ps2.* from pigeon_signal as ps join
 (select MIN(date_time) as date_time, pigeon_id, pigeon_station from pigeon_signal group by pigeon_id, pigeon_station) ps2
 on ps.date_time = ps2.date_time and ps.pigeon_id = ps2.pigeon_id and
 ps.pigeon_station = ps2.pigeon_station

解释扩展:

查询大约需要2秒才能运行(太长)。

有更好的方法来查询这些数据吗?

我希望有任何与这个问题有关的建议/提示/建议。

非常感谢:D

更新:

谢谢你的回答!

我已经将pigeon_id列更改为varchar(20)。

@ypercubeᵀᴹI将索引更改为您建议的索引,这是最快的(谢谢!!)但是为什么呢?

distinct pigeon_id: 25306

distinct pigeon_station: 36

distinct date_time: 452322

我的想法是:将索引属性按上升的不同元素的数量排序。结果:

  1. pigeon_station,pigeon_id,date_time: 1.8秒

  1. pigeon_id,pigeon_station,date_time: 0.4秒

  1. pigeon_id,date_time,pigeon_station: 1.8秒

  1. date_time,pigeon_id,pigeon_station: 1.9秒

为什么选项2比选项1快?因为pigeon_station值不像pigeon_id那样清晰。

但是,如果最优索引应该根据不同值下降的数量对属性排序,那么为什么选项4不是最快的呢?

非常感谢你抽出时间

EN

回答 1

Database Administration用户

发布于 2017-11-01 02:34:40

想必一只鸽子不可能在一秒内到达车站两次?然后添加以下内容:

代码语言:javascript
复制
PRIMARY KEY(pigeon_id, pigeon_station, date_time)

这将改进ypercube的建议,也许会提高2倍。

在这一点上,您的两个索引都可能变得无用。但在此之前,让我们看看其他重要的查询。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/189658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档