使用以下查询:
SELECT * FROM people WHERE name REGEXP(bob|robert)
我是否正确假设 mysql 将以相当随机的顺序扫描每一行以查找“bob”或“robert”(而不是先扫描 bob,然后再扫描 robert)?
如果是这样,有什么方法可以让 mysql 先尝试将整个表与“bob”匹配,然后再匹配“robert”而不执行两个单独的查询?
使用以下查询:
SELECT * FROM people WHERE name REGEXP(bob|robert)
我是否正确假设 mysql 将以相当随机的顺序扫描每一行以查找“bob”或“robert”(而不是先扫描 bob,然后再扫描 robert)?
如果是这样,有什么方法可以让 mysql 先尝试将整个表与“bob”匹配,然后再匹配“robert”而不执行两个单独的查询?
没有逻辑方法可以将整个表与bob
第一个匹配(您为什么要这样做?)
不过,您可以对结果进行排序,但如果表具有高基数和/或name
不是键,则可能会很慢。
SELECT * FROM people WHERE name = 'bob' OR name = 'robert'
ORDER BY name = 'bob' DESC
SELECT * FROM people WHERE name REGEXP(bob|robert) order by name desc
这只是一个查询,并完成工作。
SGBD可以随意扫描数据,SQL中没有指定,也不是随机的。
未指定可以是随机的,但不是随机的。