我在SQL Server 2005中查询速度慢。它有3个内部联接(在几万行到一百万行的表上)和order by子句。
所有连接键都是uuid列,但其中一个表上只有一个索引(每个表都有一个主键作为类型uniqueidentifier,另一个表将有一个列作为外键使用相同的要加入的值,但它没有索引)。
我假设在act-as-foreign-key列上添加索引会对此有很大的帮助。
有哪些其他选项可以充分利用优化此查询的优势?
注意:我的数据库似乎有一个CPU瓶颈,认为这个查询(经常运行)可能导致它似乎是合理的吗?数据库只有2GB左右,我有4GB内存,所以我怀疑有很多I / O问题。订单是否会占用CPU?
答案 0 :(得分:2)
您需要索引连接键!如果您加入多个字段,请添加覆盖所有这些字段的覆盖索引(与查询中的顺序相同)。这可能会解决90%的性能问题。
这样的查询可能会出现CPU瓶颈,因为服务器必须对所有联接进行表扫描。
答案 1 :(得分:0)
如果您的联接是内部联接,则可以创建索引视图。这将为您提供运行时性能,就好像没有连接和根本没有排序一样。它没有比这更快(以磁盘空间为代价)。如果您的连接是外连接,则有一种解决方法:插入一个虚拟行作为“null”类型的值并切换到内部连接。
正如JNK所指出的,索引外键列仍然很重要。尽管可能,你不可能完全没有索引它们。