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

transactionid両方のテーブルが主キーなので、インデックス シークがないのはなぜですか?

4

2 に答える 2

9

おそらくそれは SELECT * ... であり、おそらくテーブル全体を返すため、シークする利点はありません。シークで何をしたいですか、すべての行をインクリメンタルにシークしますか? スキャンははるかに効率的です。

おそらくスキャンを絶対に避けるように読んだり、言われたりしたことがあると思います。それに関連するより多くのコンテキストが必要だと思います。スキャンが正しい答えであり、データへの最も効率的なパスである場合もあります。クエリが遅い場合は、実際の実行計画を示すことができます。問題を特定するのに役立ちます。しかし、答えは、このクエリにシークの使用を強制することではありません。

于 2012-06-27T20:10:56.510 に答える
1

where句がないため、インデックスシークはありません。インデックス シークとは、インデックス内の値の範囲をチェックすることを意味します。where 句がないため、すべてのインデックス値をスキャンする以外に選択肢はありません。そのため、「インデックススキャン」という名前です。

これはテーブル スキャンではなく、インデックス スキャンです。いずれかのテーブルのこの列にインデックスがない場合は、2 番目のテーブルのテーブル スキャン + 最初のテーブルのインデックス スキャンが行われます。

于 2012-09-27T23:16:23.880 に答える