1

テーブルに非常に多くの行がありますtable_1。特定の行を取得する必要がある場合があります。

WHERE 句で SELECT クエリを使用すると、要件に一致するまで最初の行をループすると思います。

クエリを特定の行にジャンプさせ、その行から開始する方法はありますか?

例:

50,000,000 行あり、検索したい ID が 53750 であるとします。必要なのは、検索を 50000 から開始して、49999 行を検索する時間を節約できることです。

私はSQLの専門家ではないので、正確な用語はわかりません!

4

9 に答える 9

3

インデックスを作成する必要があります: http://dev.mysql.com/doc/refman/5.1/en/create-index.html

ALTER TABLE_1 ADD UNIQUE INDEX (ID);
于 2013-02-27T07:48:03.533 に答える
1

私の理解では、IDが53750の行を選択する必要があります。idという名前のフィールドがある場合は、次のように実行できます。

    SELECT * FROM table_1 WHERE id = 53750

idフィールドのインデックス付けとともに。これが最速の方法です。私の知る限りでは。

于 2013-02-27T07:47:05.913 に答える
0

テーブルをパーティションに分割してみてください

パーティションを追加するためのテーブルの変更の詳細

特定のパーティションから選択する

あなたの場合、50.000行ごとにIDにパーティションを作成でき、最初の50.000をスキップする場合は、パーティション2から選択するだけです。これを行う方法は、MySQLのドキュメントで非常によく説明されています。

于 2013-02-27T09:10:45.520 に答える
0
 ALTER table_1 ADD UNIQUE INDEX (<collumn>)

自動的に生成されていない場合は、最初のステップとして最適です。以下も使用できます。

 EXPLAIN <your query here>

この場合、どの種類のクエリが最適かを確認します。whereステートメントを(将来どこでも)変更したいが、そこに戻り値が表示される場合は、それにインデックスを付けることをお勧めします。

于 2013-02-27T07:49:45.500 に答える
0

実行する列にインデックスを作成しますSELECT

CREATE INDEX index_1 ON table_1 (id);

次に、前と同じように行を選択します。

また、データベース、データベースの設計、および最適化についてもお読みください。あなたの質問は誤った仮定に満ちています。回答をそのままコピー アンド ペーストしないでください。教育を受ける!

于 2013-02-27T07:50:07.450 に答える
0

Range句やWhere 句の最適化などの選択クエリの最適化について知っておくべきことがいくつかあります。ドキュメントはこの問題について非常に有益です。セクションを読んでください: SELECT ステートメントの最適化. 評価する列にインデックスを作成すると、パフォーマンスに関しても非常に役立ちます。

于 2013-02-27T07:50:17.573 に答える
0

考えられる解決策の 1 つ ビューを作成し、ビューからクエリを実行できます。ビューの作成とビューからのデータの取得の詳細は次のとおりです

http://www.w3schools.com/sql/sql_view.asp

これで、その膨大な数の行を多くのビューに分割するだけです(つまり、1つのビューで行1〜10000、次に別のビューで10001〜20000)

次に、ビューからクエリします。

于 2013-02-27T07:50:20.720 に答える
0

自分自身を少し尊重しているSQLデータベースは、目的の行を取得するために最初の行からループを開始しないと確信しています。しかし、彼らがそれをどのように機能させているのかもわからないので、正確な答えを出すことはできません.

WHERE句の内容とテーブルのインデックス方法を確認できます。適切な主キーがありますか? そのために数値データ型を使用するように。クエリで使用されるより多くの列にインデックスがありますか?

また、データベース サーバーをインストールする際には、データとログ ファイルをどこに置くか、サーバーに割り当てるメモリの量、拡張の設定など、考慮すべきことがたくさんあります。サーバーを調整するためにできることはたくさんあります。

于 2013-02-27T07:51:58.590 に答える
-1

このように簡単に試すことができます。

query = "SELECT * FROM tblname LIMIT 50000,0

phpmyadminで試してみました。WHERE "50,000" が検索の開始行です。

編集:しかし、もし私があなたなら、これは使用しません.1〜49999件のレコードを検索する必要があるからです.

于 2013-02-27T07:53:09.090 に答える