1

schema1 と schema2 の 2 つのスキーマに 2 つのテーブルがあります。スキーマ 2 がテーブルの主キーにクラスター化インデックスを持っていることを除いて、両方のテーブルの設計は同じです。

Schema1 テーブルには主キーがありません (これが古い設計であり、schema2 である新しいスキーマ設計で改良する必要があります)

スキーマ 2 では、COL_1 は table1 の主キーであり、(COL_4, COL_12) はインデックス付きの table2 のキーです。

Table1 (col_1, col_2, col_3, col_4 ... col_10) Table2 (col_1,col_4,col_12, .... col_20)

table1 からデータを取得するクエリがあり、次のとおりです。

SELECT t1.COL_1,t1.COL_2, t1.COL_3, t1.COL_4,t1.COL_5 
FROM table1 t1
LEFT JOIN table2 t2 ON
     t2.COL_1 = t1.COL_1,
     AND t2.COL_4 = t1.COL_4
WHERE 
     t1.col_10 = '/some string/'

両方のスキーマでこのクエリを実行すると、取得される行数は同じになります。しかし、行の順序は同じではなく、両方のデータを比較する方法がわかりません。

私の質問。

  1. 行数が一致しているだけで、2 つのスキーマの両方の結果が一致すると仮定できますか?
  2. schema2 のテーブルにインデックスがある場合、結果は異なりますか?

上記の動作を理解していただきたいと思います。

前もって感謝します。

4

3 に答える 3

1

しかし、行の順序は同じではなく、両方のデータを比較する方法がわかりません

もちろん。クラスター化インデックスを追加しました。これは、インデックス付きテーブルがインデックスに従って並べ替えられて格納されることを意味します。しかし、ORDER BY句がなければ、定義された順序はありません。

両方のデータを比較する方法がわかりません

句を使用して、ORDER BY必要に応じてデータを並べ替えます。これにより、比較が可能になります。

投稿したクエリは、結合条件が on であるのと同じ順序で対応する行を返す必要があるCOL_1ため、問題の理由がよくわかりません。

于 2013-08-07T17:08:12.240 に答える
0

ORDER BY句がないため、返される順序は同じではありません。これがない場合、返される行の順序は実装で定義されるため、仮定を行う必要はありません。

インデックスはクエリのパフォーマンスを向上させる可能性がありますが、その存在によって異なる結果が返されることはありません。

行数が一致するという理由だけで同等の結果を想定することについては、問題を抱えていると思います。

于 2013-08-07T17:08:25.150 に答える
0

テーブル 1/スキーマ 1 はヒープ テーブルです。そのテーブルの末尾に追加されたレコードを挿入します。そのテーブルにクエリを実行すると、レコードは挿入されたのと同じ順序で返されます (ただし、カウントしないでください)。

テーブル 2/スキーマ 2 はクラスター化されたインデックス テーブルです。つまり、そのテーブルにレコードを挿入すると、必要に応じてレコード間に挿入されます (または、新しいレコードの主キーが他のすべての既存のものよりも大きい場合は追加されます)。そのテーブルにクエリを実行すると、主キーのソート順でレコードが返されます (ただし、カウントされません)。

これら 2 つのテーブルを比較して、それらがまったく同じであることを確認したい場合は、これを行うことができます (巨大なテーブルの場合は時間がかかることに注意してください)。

-- show all records in table1 that do not exist in table2
select * from table1
except
select * from table2

そしてその逆

-- show all records in table2 that do not exist in table1
select * from table2
except
select * from table1

これら 2 つのクエリからレコードが返されない場合、テーブルは同じです。異なることが許可されている「更新/作成」された列または ID 列がある場合は、すべてのクエリで比較する列をリストします。

于 2013-08-07T17:19:23.987 に答える