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
相关产品推荐
相关产品推荐

