4

VARCHAR2(50 BYTE)と比較するための最良の(そして最速の)方法を探していCHAR(12 BYTE)ます。

2 つのデータベースがあり、最初に CHAR 列の table1 が含まれています (下線は CHAR の長さを埋めるための空白文字を意味します)

ID  VALUE
1   123-45___
2   123-456__
3   123-457__

2 番目のデータベース (table2) には、空白のない VARCHAR2 が含まれています。

ID  VALUE
4   123-45
5   123-456
6   123-457

だから、私はこのようなものが欲しい

SELECT table1.ID FROM table1 WHERE table1.VALUE = '123-45'
4

1 に答える 1

6

列にtable1.valueはインデックスが付けられているため、インデックスが使用されなくなるため、比較のためにそれを操作したくありません。したがって、検索している値を変更する必要があります。

SELECT table1.ID FROM table1 WHERE table1.VALUE = RPAD('123-45', 12)

オラクルは、あなたが示したクエリで暗黙的にそれを行い、引き続きインデックスを使用します。テーブルを結合している場合も同じですが、結合中にパディングまたはトリムするかどうかは、どのテーブルがドライバーであるかによって異なります。

SELECT table1.ID, table2.ID
FROM table1
JOIN table2 ON table2.value = RTRIM(table1.value)
WHERE table1.VALUE = RPAD('123-45', 12)

または:

SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)
于 2014-04-15T12:12:30.980 に答える