1

倍精度の外部キーを整数の主キーに結合する最もパフォーマンスの高いクエリは何ですか? テーブルはデータ ベンダーのものであり、列のデータ型を変換したくありません。

この例では、fk は倍精度で、pk は整数です。

ラウンドを使用する必要がありますか?

SELECT this_table.pk, other_table.some_col FROM this_table
INNER JOIN other_table ON other_table.pk = ROUND(this_table.fk) 

それとも、変換は必要ありませんか?

ありがとう。

4

1 に答える 1

2

integer と double を直接結合できます。MySQL は型キャスト自体を管理します。ROUND(double) は整数ではなく double を返します。

結合は、整数を表す double に対してのみ成功します。つまり、6.0 を 6 に直接結合できます。6.000001 を 6 に直接結合することはできません。

6.000001を 6 に結合する場合は、 double を整数にキャストして、 6.0 <= 6 < 7.0 の範囲の値を結合します。. .

select ...
from table_with_integers n
inner join table_with_doubles d 
  on cast(d.double_column as unsigned integer) = n.integer_column
...

または ROUND() を使用して、6.0 <= 6 < 6.5 の範囲の値を結合します。

double が整数を表すと想定される場合、型キャストはより理にかなっています。しかし、double が整数を表すと想定されている場合、そもそも 6.000001 のような値を取得するべきではありません。

于 2013-09-04T08:26:18.257 に答える