【发布时间】:2013-04-02 10:34:11
【问题描述】:
在SELECT 声明中:
SELECT name
FROM users
WHERE address IN (addr_a, addr_b, addr_c, ...);
我们知道它将选择所有地址在 (addr_a, addr_b, addr_c, ...) 中的人的姓名。但我想知道执行此语句时它实际上做了什么。
例如,它是否搜索表中的每个元素以检查其地址是否在 (addr_a, ...) 中?
如果addr_a、addr_b 太长,是否会减慢搜索速度?
这些东西有什么资料可以推荐吗?
编辑:我没有指定 RDBMS,因为我想知道尽可能多的 SQL 实现。
再次编辑:在这里我得到了关于 MySQL 和 SQL Server 的答案,我接受了“SQL Server”的答案,因为它是一个详细的答案。欢迎更多关于其他 RDBMS 的解答。
【问题讨论】:
-
你为什么不用'like'?
-
@Praveen 我认为这里的
addr_xs 是实际地址的占位符。 -
这取决于是否在
address上创建索引 -
什么是 RDBMS? SQL 是一种语言,有许多 SQL 实现。
-
@Praveen:正如@Jared 所说,
addr_xs 是实际地址的占位符。