2
SELECT *
FROM
    tbl_transaction t
LEFT JOIN
    tbl_transaction_hsbc ht
ON 
    t.transactionid = ht.transactionid

transactionid两个表上都是主键,那么为什么没有索引搜索?

4

2 回答 2

9

也许是 SELECT * ... 并且可能因为您要返回整个表,所以寻找没有任何优势。你想要一个 seek 做什么,逐步搜索每一行?扫描效率更高。

我知道您可能已经阅读或被告知要不惜一切代价避免扫描。我认为需要有更多与此相关的上下文。有时扫描是正确的答案,也是获取数据的最有效途径。如果查询很慢,也许您可​​以显示一个实际的执行计划,我们可以帮助查明问题。但答案不会强制此查询使用搜索。

于 2012-06-27T20:10:56.510 回答
1

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

这不是表扫描,而是索引扫描。如果您在其中一个表中的此列上没有索引,您将对第二个表进行表扫描 + 对第一个表进行索引扫描。

于 2012-09-27T23:16:23.880 回答