私は、それぞれが独自のものでなければならないいくつかのフィールドを持つフォームを持っています。このクエリを実行する最善の方法は何ですか?mySQLデータベースから一意の値を確認する
私は1つの接続と1 mySqlAdapterを開き、実行する必要があります。
myDataAdapter.Fill(myDataSet, "table");
(SQLクエリごとに変更)各値のためか、事前にこの
感謝を行うには、より最適化された方法があります
ドロンシナイ
私は、それぞれが独自のものでなければならないいくつかのフィールドを持つフォームを持っています。このクエリを実行する最善の方法は何ですか?mySQLデータベースから一意の値を確認する
私は1つの接続と1 mySqlAdapterを開き、実行する必要があります。
myDataAdapter.Fill(myDataSet, "table");
(SQLクエリごとに変更)各値のためか、事前にこの
感謝を行うには、より最適化された方法があります
ドロンシナイ
珍しいような音がします。詳細についてもっと詳しく説明できる場合は、より良い解決策が提案されるかもしれません。
あなたの言ったことを考えれば、あなたのフォーム上のいくつかの入力フィールドのいずれかの入力値がすでに "テーブル"に存在するかどうかを知る必要があることを理解しています。
つのオプションは、自分自身を提示:
1)その別けれどもあなたが戻ってすべての行を取得していない場合は
SELECT column1, column2 FROM table WHERE column1='value1' OR column2='value2'
は、すべての値がユニークだった
何かのように(ノートDBを掲載しますアプリケーションのユーザーは、SELECTの直後に同じ値を入力することができます。それを扱うのは、必要な場合は別の質問の対象です)。
行を戻すと、返された行の値によって、すでにDBに存在していたものが表示されます。
2)はDBは一意である必要があり、各列に一意のインデックスを作成し、一意
を強制してもらいます。データベースに多くのインデックスを配置すると、挿入と更新のパフォーマンスが大幅に低下し、ディスク領域が消費されることに注意してください。
オプション1は、データベースのサイズやハードウェアによっては遅すぎることになります。フィールドにインデックスを付けることなく、一意にする必要があります。
Ericが指摘したオプションに加えて、別のオプションを提示します。 1つのデータベース呼び出しを使用して既存の値をすべてロードすることができます。パフォーマンス上の理由から、一意の値をHashSetにロードすることをお勧めします。次に、フォームの値をHashSetに対してチェックし、その値がHashSetに存在しないことを確認します。
ここが問題です。ここでどのくらいのデータを話しているかを考慮する必要があります。データがデータベーステーブル全体で一意である必要がある場合は、おそらくEricが提案した一意の制約に進むことになります。あなたは、私が上記のアプローチに進むことによって、またはエリックが言及した潜在的に性能の低いSQLクエリを構築することによって、スケーラビリティ問題を将来的には望んでいません。
正しい答えは、一意性を強制する必要があるデータの構造と量によって異なります。
アドバイスいただきありがとうございます。データがあまりないため、一意のアプローチを採用するつもりです –