一位同事询问了 Owens 在 The Definitive Guide to SQLite, 2nd ed, p101 中写的关于排序规则类型的内容:“reverse 比其他任何东西都更适合测试(也许还有说明)。”
这对于 SQLite 作为 dbms 的实现是否有效?反向二进制排序规则有实际用途吗?SQLite 的反向/二进制排序规则是否会影响查询性能,例如,当使用 ORDER BY 时?
SQLite 没有reverse
排序规则。
rtrim
显然,排序规则(忽略尾随空格字符)和reverse_unordered_selects
编译指示之间存在混淆。
后者对测试很有用;它的文件说:
PRAGMA reverse_unordered_selects = boolean ;
启用后,此 PRAGMA 会导致没有 ORDER BY 子句的 SELECT 语句以与正常情况相反的顺序发出结果。这可以帮助调试对结果顺序做出无效假设的应用程序。
如果 SELECT 省略了 ORDER BY 子句,SQLite 不保证结果的顺序。即便如此,结果的顺序不会从一次运行到下一次发生变化,因此许多应用程序错误地依赖于任意输出顺序,无论该顺序是什么。但是,有时新版本的 SQLite 将包含优化器增强功能,这将导致没有 ORDER BY 子句的查询的输出顺序发生变化。发生这种情况时,依赖于特定输出顺序的应用程序可能会出现故障。通过在禁用和启用此 pragma 的情况下多次运行应用程序,可以尽早识别和修复应用程序对输出顺序做出错误假设的情况,从而减少可能由链接到不同版本的 SQLite 引起的问题。