2016-05-19 3 views
0

私が最も一般的な方法はSUBSTRINGを使用することであるが、binary(n)フィールドに、指定されたインデックスの単一byteを取得するためのより高速な方法はありますか?知っていますかSUBSTRINGはMicrosoft Sql Serverのバイナリフィールドで個々のバイトを取得する最速の方法ですか?

+0

あなたは* *より高速な方法が必要ですか?あなたのコードをプロファイリング*して、あなたのパフォーマンス*目標*と比較して、 'SUBSTRING'がボトルネックであることを証明しましたか? –

+0

なぜ私はボトルネックがあると思いますが、より良いものが存在するかどうかが不確かな場合には誰もが解決に慣れていかなければなりませんか?私にはボトルネックはありません。私はGUIDの一意性をテーブルの1億のGUID行の中で0.05ミリ秒でチェックしています。しかし、私の機能の一部は、特定の配列インデックスで1バイトを取得するために部分文字列を使用することです。部分文字列は、文字列に最適化されているように感じ、純粋にそれを行うための断食された方法であると私に自信を与えません。 –

+0

あなたは全体のプロセスは、(それが何であれ)は0.01秒だけ変化するタイミングでそれを置き換えるSUBSTRING'どんな対 '実行するために2時間かかり、場合、あなたのプロセスの*一部が*最適化それは本当に価値がありましたか?また、 'SUBSTRING'の*ドキュメンテーションをチェックすると、バイナリでどのように動作するかが明確に*指定されていることがわかります。バイトを抽出するために何らかの"ハック "がありません。 –

答えて

0

String.charAt(N)またはString.toBytes()[N]。

文字列を扱うとき、あなたはいくつかの文字を考慮する必要がありますが、複数バイトのエンコーディングを持っています。

+0

Sql ServerにcharAtはありませんが、質問には指定できませんでした。私はそれを編集する方がよいでしょう。 –

+0

Javaでやってみませんか?なぜあなたはSQLサーバでそれをしなければならないのですか? –

+0

@MinhKieu - SQLのカラムに2GBのデータが格納されていて、45番目のバイトを抽出したい場合、サーバから2GBを完全に転送するには非常に効率が悪く、 Javaメソッドの使い勝手を向上させます。 –

関連する問題