代码之家  ›  专栏  ›  技术社区  ›  Kureigu

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

  •  -1
  • Kureigu  · 技术社区  · 5 年前

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

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

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

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

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

    1 回复  |  直到 5 年前
        1
  •  0
  •   Rick James    5 年前

    单人桌……错了。

    一个表描述了每个“设备”(或“传感器”)。它有一个 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 ;你还有别的什么。请记住,性能主要取决于需要触摸的行数。你拒绝的也算在内。