在 SQL 数据库(我使用 Python+Sqlite)中,如果我们有 100 万行,如何确保查询
SELECT * FROM mytable WHERE myfunction(description) < 500 AND column2 < 1000
[-----------------------------] [--------------]
high-CPU cost condition easy-to-test
requiring 100 µs per test condition
经过优化,第一个条件(CPU 昂贵)仅经过测试如果易于测试的第二个条件已经为真? (因为这是一个逻辑AND
,是不是很懒AND
?)
例子:
Note:
强制执行顺序的一种方法是使用case
表达。一般来说,SQL 优化器可以重新安排操作,唯一的例外是case
.
SELECT *
FROM mytable
WHERE (CASE WHEN column2 >= 1000 OR column2 IS NULL THEN 0
WHEN myfunction(description) < 500 THEN 1
END) = 1;
一般来说,case
不鼓励使用以下表达式WHERE
条款。 。 。一个主要原因是它们阻碍了优化。在这种情况下,这是一件好事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)