Py学习  »  DATABASE

如何加快查询到一个巨大的mysql数据库(6M+行)

Kureigu • 5 年前 • 1386 次点击  

作为一个项目的一部分,我一直在收集部署在野外的多个传感器的数据。其目的是了解设备的性能以及可能出现的任何潜在问题或错误。

我将数据存储在数据库中的一个表中,其中列id(primary)、mac_address、name、status、timestamp。

mac_地址是保证物理设备始终相同的一件事,这就是我一直在使用的从数据库中提取信息的方法。

我的目标是能够从下拉列表中选择mac_地址的特定设备在特定时间段内提取数据。即使只做一个select distinct查询就可以得到一个惟一的mac地址列表,但为该列创建索引似乎会加快速度。但是,从数据库中提取任意数量的完整行仍需要30秒。

在这么大的数据库中加快查询速度的最佳方法是什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44930
 
1386 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Rick James
Reply   •   1 楼
Rick James    6 年前

单人桌……错了。

一个表描述了每个“设备”(或“传感器”)。它有一个 id 可能是2字节 SMALLINT UNSIGNED (范围是0..65K——没有比这更多的传感器了?)。请注意mac_地址和名称属于此表。这个 身份证件 用在另一张桌子上…

另一个表包含 sensor_id , timestamp 以及 value . 这张桌子应该有 PRIMARY KEY(sensor_id, timestamp) 并且be engine=innodb`。现在它非常有效地查找一个传感器在一段时间内的所有读数。

这完全避免了 SELECT DISTINCT 因为第一张桌子上没有傻瓜。

如果你要拉下,那么 TINYINT UNSIGNED (1字节,0..255)可能很大。

好吧,我帮你做了两个 SELECTs ;你还有别的什么。请记住,性能主要取决于需要触摸的行数。你拒绝的也算在内。