添加额外的SQL查询条件会降低还是提升查询性能?
结论
你修改后的查询语句执行速度会远快于原始写法。
具体原因(基于你提到的无索引场景)
- 没有索引的情况下,两个查询都会走全表扫描,但修改后的语句会提前过滤掉大量无效行:
原始查询需要对表中每一行数据都依次比对3个姓名条件,哪怕该行对应的人员不在英国,也要完成所有姓名比对才会排除。而新增COUNTRY = 'UK'的条件后,每一行会先判断国家是否符合,只要不是英国的行直接被排除,不需要再执行后续的姓名比对,能节省大量无效计算开销。 - 你担心的额外增加检索负担的情况不会出现:SQL引擎的优化器会自动评估每个WHERE条件的计算成本和筛选率(即能过滤掉多少比例的无效数据),优先执行成本低、筛选率高的条件。当前场景下国家判断仅需一次等值比较,成本远低于3次姓名OR比对,且能直接过滤掉所有非英国的无效数据,优化器必然会优先执行国家筛选,再做姓名匹配。
额外优化建议
你可以把多个OR的姓名匹配改为IN写法,语义完全一致,代码更简洁,优化器处理效率也更高:
SELECT * FROM table1 WHERE COUNTRY = 'UK' AND NAME IN ('Alice', 'Bob', 'Charlie')
内容的提问来源于stack exchange,提问作者user17193038
相关产品推荐
相关产品推荐

