在左连接上使用聚簇索引扫描而不是聚簇索引

时间:2012-06-27 20:06:59

标签: sql-server indexing

SELECT *
FROM
    tbl_transaction t
LEFT JOIN
    tbl_transaction_hsbc ht
ON 
    t.transactionid = ht.transactionid
两个表上的

transactionid是主键,为什么没有索引?

2 个答案:

答案 0 :(得分:7)

也许这是SELECT * ...也许是因为你要归还整个桌子,所以没有优势可以寻找。你想要做什么,逐步寻求每一行?扫描效率更高。

我意识到你可能已经阅读或被告知不惜一切代价避免扫描。我认为需要有更多与此相关的背景。有时,扫描是正确的答案,也是最有效的数据路径。如果查询速度很慢,也许您可​​以显示实际的执行计划,我们可以帮助查明问题。但答案并不是强迫此查询使用搜索。

答案 1 :(得分:0)

没有索引搜索,因为您没有where子句。 索引搜索意味着您检查索引中的一系列值。 由于没有where子句,除了扫描所有索引值之外别无选择。 所以名称为“索引扫描”。

这不是表扫描,而是索引扫描。如果其中一个表中没有此列的索引,则第二个表的表扫描+第一个表的索引扫描。