0

使用以下查询:

SELECT * FROM people WHERE name REGEXP(bob|robert)

我是否正确假设 mysql 将以相当随机的顺序扫描每一行以查找“bob”或“robert”(而不是先扫描 bob,然后再扫描 robert)?

如果是这样,有什么方法可以让 mysql 先尝试将整个表与“bob”匹配,然后再匹配“robert”而不执行两个单独的查询?

4

2 回答 2

1

没有逻辑方法可以将整个表与bob第一个匹配(您为什么要这样做?)

不过,您可以对结果进行排序,但如果表具有高基数和/或name不是键,则可能会很慢。

SELECT * FROM people WHERE name = 'bob' OR name = 'robert'
ORDER BY name = 'bob' DESC
于 2013-07-09T13:37:30.397 回答
1
SELECT * FROM people WHERE name REGEXP(bob|robert) order by name desc

这只是一个查询,并完成工作。

SGBD可以随意扫描数据,SQL中没有指定,也不是随机的。

未指定可以是随机的,但不是随机的。

于 2013-07-09T13:37:41.453 回答