小。速度很快。可靠。
选择任意三个选项。
INDEXED BY子句

1索引的工作原理

INDEXED BY短语强制SQLite查询计划器使用上的特定命名索引删除,选择,或更新声明。INDEXED BY短语是SQLite扩展不能移植到其他SQL数据库引擎。

合格表格名称:

方案名称 . 表格名称 作为 别名 索引 索引名称 不是 索引

“索引者索引名称“短语指定命名索引必须使用以查找上表中的值。如果索引名称不存在或无法使用对于查询,则SQL语句的准备失败。“NOT INDEXED”子句规定,当访问前面的表,包括由创建的隐含索引UNIQUE和PRIMARY KEY约束。然而罗伊德即使指定了“NOT INDEXED”,仍可用于查找条目。

一些SQL数据库引擎提供了非标准的“提示”机制可以用于为查询优化器提供有关它应该使用哪些索引的线索用于特定语句。SQLite的INDEXED BY子句是一种暗示机制,不应该这样使用。INDEXED BY子句没有向优化器提供关于哪个索引的提示使用;它为优化器提供了使用哪个索引的要求。如果查询优化器无法使用INDEXED BY子句,则查询将失败并返回错误。

INDEXED BY子句是用于调谐查询的性能。INDEXED BY子句的意图是如果架构发生更改,例如删除或创建索引,会导致对时间敏感的查询执行查询计划以进行更改。INDEXED BY子句旨在帮助检测回归测试期间出现不希望出现的查询计划更改。应用程序建议开发人员在应用程序设计、实现、测试和调优。如果INDEXED BY完全可以使用,它应该插入当“锁定”设计时,开发过程结束。

2另请参见

  1. 这个查询计划检查表描述应用程序的步骤开发人员应该遵循以下步骤来帮助解决查询规划器问题。请注意,INDEXED BY的使用是最后的手段,只能使用当所有其他措施都失败时。

  2. 一元“+”运算符可用于取消WHERE子句中的术语被索引使用的资格。谨慎使用一元+有时有助于防止查询规划器选择一个糟糕的索引,但不限制它使用一个特定的索引。仔细放置一元+运算符是更好的控制方法查询使用哪些索引。

  3. 这个sqlite3_stmt_status()C/C++接口以及SQLITE_STMTSTATUS_FULLSCAN_STEP公司SQLITE_STMTSTATUS_SORT公司动词可以用于在运行时检测SQL语句有效利用指标。许多应用程序可能倾向于使用sqlite3_stmt_status()检测索引滥用的接口而不是此处描述的INDEXED BY短语。