如何用布尔条件搜索大数据 - Mysql

问题描述

我有一个包含 30M 行的大表(每天都在增加)。该表包括一些字段,例如idstationIdsentAt(日期时间)、isApprovedtinyint)、...我索引列(stationIdsentAt).

这是我的查询

Select  id,stationId,sentAt,isApproved
    from  monitoring_data_info
    where  stationId = 'akhdsjha12'
      and  isApproved = 1
    order by  sentAt DESC
    limit  1

数据库浪费了很多时间来返回结果,因为它必须搜索整个数据集来与条件isApproved = 1进行比较。所以我的问题是:

  • 我应该索引 isApproved 列的 50% 为 1 吗?
  • 有没有办法优化这个查询

解决方法

您要添加此索引:

ALTER TABLE monitoring_data_info
 ADD INDEX (stationId,isApproved,sentAt);

索引中列的顺序很重要:

  • 前两列会将搜索减少到仅匹配的行。

  • 第三列将确保按照您想要返回的顺序读取行,因此 ORDER BY 将是空操作。

您可能喜欢我的演示文稿 How to Design Indexes,Reallyvideo of me presenting it。我解释了如何使用这样的索引优化查询。