[英]SQL query with multiple indexes - SQL server 2000
我使用类似的查询
select.....from.. with... (INDEX=IX_TABLE_1, INDEX=IX_TABLE_2)...
我收到以下错误
每个表只允许一个索引提示列表
这似乎可以与SQL Server 2005一起很好地工作。SQLServer是否有问题?
我认为可能是因为您使用的语法。
代替(INDEX = IX_TABLE_1,INDEX = IX_TABLE_2),请尝试:
(INDEX=IX_TABLE_1, IX_TABLE_2)
我认为这是事实,您有2个“ INDEX =“部分。
另外,我建议仅将索引提示用作最后的选择,因为查询优化程序通常应选择要使用的最佳计划/索引。 这就是为什么通常应该信任优化器的原因。 如果您确实使用了索引提示,则最好经常对其进行检查,因为它们可能会随着时间的流逝而变得越来越差(例如,随着数据量的增长,最初在该提示下表现更好的内容可能会开始变差)。
实际上,您不应该首先给出索引提示。
如果优化程序似乎在选择要使用的索引方面很愚蠢; 这通常值得进一步调查。
其次,请确保优化程序不会拒绝特定索引,因为实际上该索引会降低性能。 例如,您可能很想执行以下操作之一:
SELECT Col1, Col2, Col3, ... FROM Customers WITH (INDEX=IndexByName) WHERE FistName LIKE 'A%' SELECT Col1, Col2, Col3, ... FROM Customers WITH (INDEX=IndexByName) ORDER BY FirstName
索引提示似乎很合乎逻辑; 然而:
我不确定是否是这种情况; 但是您的问题并不表示它是一个复杂的多表查询。 因此,它实际上可能如下所示?
SELECT Col1, Col2, ...
FROM ATable WITH (INDEX=Index1, INDEX=Index2)
无论哪种情况, 暗示单个表的多个索引都毫无意义(除非它与自联接一起使用多次)。 你说:
这似乎与SQL Server 2005配合良好。
我不得不问:您确定吗?
我试了一下 并没有导致错误消息-严重混淆了优化器。 它迫使优化器遍历同一张表两次( 不必要 ),并将结果集彼此重新连接-产生了巨大的开销!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.