select 1 是什么
in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控
制在 1000 个之内。
使用 in 可能会造成:
- 执行效率降低:IN 后跟大量数据时,数据库优化器可能难以高效执行。
- 索引失效:IN 可能导致索引失效,触发全表扫描。
- 网络与内存消耗:大量元素传递给数据库,增加网络和内存消耗。
可以使用 join 和 exist 来替代 in 的操作
-- 查询order中的vip 用户的订单
SELECT *
FROM orders o
WHERE o.customer_id
IN (SELECT customer_id FROM vip_customers);优化为:
SELECT *
FROM orders o
WHERE EXISTS (SELECT 1FROM vip_customers vWHERE v.customer_id = o.customer_id
);
那么这里的 select 1 是什么意思呢:
SELECT 1 在 SQL 中表示“返回常量 1”,通常在 EXISTS 子查询中使用。
exists 只关心子查询中数据是否存在,不关心具体返回的数据,若子查询中数据至少有 1 行,则返回 true.
SELECT 1 表示存在性检查,性能更优,语义更清晰。相比于 select * 而言不需要检查所有列的数据,减少了 IO 消耗,理论上性能更好.
因此 在 EXISTS 语句中,它是最佳实践,减少数据库不必要的开销。