在T-SQL中最好地使用临时表上的索引

nin*_*ded 13 t-sql indexing temp-tables sybase-ase

如果要在存储过程中创建临时表并希望在其上添加一个或两个索引,以提高针对它的任何其他语句的性能,最佳方法是什么?SYBASE说这个:

"创建索引时,表必须包含数据.如果创建临时表并在空表上创建索引,Adaptive Server不会创建列统计信息(如直方图和密度).如果在创建索引后插入数据行,优化器的统计数据不完整."

但是最近一位同事提到,如果我在不同的存储过程中创建临时表和索引到实际使用临时表的那个,那么Adaptive Server优化器能够使用它们.

总的来说,我不是那些增加价值的包装程序的忠实粉丝,所以我实际上并没有去测试这个,但我想我会把问题放在那里,看看是否还有其他任何人方法或建议?

AJ.*_*AJ. 7

一些想法:

  • 如果您的临时表太大而无法对其进行索引,那么有更好的方法来解决问题吗?
  • 您可以通过提供以下格式的优化器提示强制它使用索引(如果您确定索引是访问表的正确方法):

    SELECT * 
    FROM   #table (index idIndex) 
    WHERE  id = @id
    
    Run Code Online (Sandbox Code Playgroud)

如果您对一般的性能提示感兴趣,我在这里已经回答了一些其他问题: