我(例如)有一个索引:
CREATE INDEX someIndex ON orders (customer, date);
此索引是否仅加速使用客户和日期的查询,还是加速了像这样的单列查询?
SELECT * FROM orders WHERE customer > 33;
我正在使用SQLite.
如果答案是肯定的,为什么每个表可以创建多个索引?
还有一个问题:当您在查询中使用两个列时,组合索引与两个分离索引相比要快多少?
marc_s对你的第一个问题有正确的答案.多键索引中的第一个键可以像单个键索引一样工作,但任何后续键都不会.
至于复合索引的速度有多快取决于您的数据以及如何构建索引和查询,但这通常很重要.索引基本上允许Sqlite对字段进行二进制搜索.
使用您在运行查询时提供的示例:
SELECT * from orders where customer > 33 && date > 99
Sqlite将首先使用二进制搜索在客户> 33的整个表上获得所有结果.然后,它将仅对那些查找日期> 99的结果进行二进制搜索.
如果您在客户和日期上使用两个单独的索引执行相同的查询,则Sqlite必须二次搜索整个表,首先是客户,再次是日期.
因此,您将看到多少速度增加取决于您根据查询构建索引的方式.理想情况下,索引中的第一个字段和查询应该是消除最可能匹配的字段,因为这将通过大大减少第二次搜索必须执行的工作量来提高速度.
有关更多信息,请参阅:http: //www.sqlite.org/optoverview.html
我很确定这会起作用,是的 - 无论如何它都适用于MS SQL Server.
但是,如果您只需要选择日期,例如日期范围,则此索引不会对您有所帮助.在这种情况下,您可能需要仅在日期上创建第二个索引,以使这些查询更有效.
渣