You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中WHERE字段IS NOT NULL查询耗时,求替代方案

问题场景

用户执行如下SQL查询非空的sensor2字段时,每次耗时约1.5秒:

CREATE TABLE xyz_table (sensor1 int, sensor2 int);

INSERT INTO xyz_table VALUES
(10, 20),(30, null),(40, 50),(60, null);

SELECT sensor2 FROM xyz_table WHERE sensor2 IS NOT NULL;
替代优化方案
  • 给sensor2字段创建单列索引
    这是最直接有效的优化方式,数据库会通过索引快速定位非空值,避免全表扫描:

    CREATE INDEX idx_xyz_sensor2 ON xyz_table(sensor2);
    

    索引创建完成后,再次执行原查询,耗时会大幅降低。

  • 检查执行计划验证优化效果
    用EXPLAIN命令查看查询是否走索引,确认优化是否生效:

    EXPLAIN SELECT sensor2 FROM xyz_table WHERE sensor2 IS NOT NULL;
    
  • 超大规模数据用分区表优化
    如果表数据量达到千万级以上,可按sensor2是否为空做分区,查询时直接访问非空分区:

    -- MySQL分区表示例
    ALTER TABLE xyz_table PARTITION BY LIST COLUMNS(sensor2) (
      PARTITION p_not_null VALUES IN (1,2,3,...), -- 根据实际非空值范围调整
      PARTITION p_null VALUES (NULL)
    );
    

    注:不同数据库分区语法存在差异,需对应调整。

内容的提问来源于stack exchange,提问作者Sake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:01:55