2011-11-10 11 views
1

MySQLテーブルを1行ずつアプリケーションから読み込んで、テーブルが常に上から下へ、完璧に連続して読み込まれることを前提にしても安全ですか?MySQLテーブルの読み込み順序の信頼性

E.G.テーブルがユニークなIDで注文されていて、一度に1行ずつC++で読み込んでいます。毎回正確な一意のID順で各行を取得することを想定しても安全ですか?

私の直感は、それは安全な仮定ではありませんが、私はそのための技術的推論がありません。

私のテストでは、テーブルの行が順番どおりに提供されていることが常に示されていますが、それに頼って神経質になっています。その結果、私はプログラムを書いて、この仮定に依存しないようにして、プログラムを少し複雑にし、少し効率を落とさせるようにします。あなたは、標準C++のMySQLコネクタを使用している場合、あなたは何の問題はないはず、次のクエリ、

SELECT columns 
FROM tables 
WHERE predicates 
ORDER BY column ASC/DESC; 
+0

私はそれがまさにORDER BYが達成すべきものだと思いました。 oO – DanielB

+0

MySQLデータベースへの接続にはどのライブラリを使用していますか? –

+0

標準(私はそう思う)C++コネクタ。 – Columbo

答えて

1

を使用する場合は

おかげ C

2

そしてreference manual、「プレビューバージョンに応じてクライアント上のすべての結果セットをバッファリングしてカーソルをサポートします。

また、結果セットがバッファされているため、基礎となるテーブルが変更されたときに変更されないということは、一般的に私の経験です。

0

あなたは正しいです。 MySQLテーブルを1行ずつアプリケーションから読み込むときは、テーブルが常に上から下に順番に読み込まれるとは限りません。 テーブルが一意のIDで注文され、(C++などの方法で)一度に1行ずつ読み込むと、毎回正確な一意のID順で各行が取得されるとは限りません。

RDBMSでの保証はありません。誰もその前提に頼るべきではありません。

行には、リレーショナル表の組み込みまたはデフォルトの順序はありません(読んではいけません)。テーブル(リレーション)は、定義上、順序付けされていないセットまたは行です。

SELECT columns 
FROM table 

彼らはファイル全体を読み込み、ディスクからすべての行を取り出す:この印象を与える何

は次のようにクエリの結果を返すように要求された場合に、ほとんどのシステムでは、ということです。そのため、ファイルに格納されている順に、またはクラスタ化されたキーの順に(通常、MySQLのInnoDBテーブルなど)行を返します。したがって、毎回同じ順序で結果を返します。

FROM句に複数のテーブルがある場合、またはWHEREの条件がある場合、テーブル全体が読み込まれるわけではないため、異なるインデックスが使用される可能性があるため、システムはテーブルファイルを読み込むことはできませんインデックスファイルのみ。またはテーブルの小さな部分を読んでください。

パーティション化された表または分散データベースを使用している場合は、別の話です。

結論として、毎回同じ注文を保証したい場合は、ORDER BYの部分をクエリに含める必要があります。

関連する問題