社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Kureigu • 5 年前 • 1377 次点击  

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

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

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44930
 
1377 次点击  
文章 [ 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 ;你还有别的什么。请记住,性能主要取决于需要触摸的行数。你拒绝的也算在内。