この記事では、Mysql が ID 値の順序に基づいて結果を返す方法について説明します。

藏色散人
リリース: 2021-10-26 16:42:26
転載
1853 人が閲覧しました

今日、指定された ID 値の順序で結果セットを返す必要があるクエリがあるという問題に遭遇しました。実際、ソートのためにプログラムに配置することもできるのですが、突然確認したいと思いました。 Mysql を使って直接クエリして返すことができたので探してみたのですが、実際には補助関数を実装する必要がありました。

Field() 関数

Mysql には、指定した順序で並べ替えをカスタマイズできる関数 Field() が用意されています。

例:

主キー ID と名前属性名を持つ地域という名前の都市情報テーブルがあるとします。次に、ID 2、3、1 をクエリして、この順序で返したいとします。

<p>select id, name from regions;#id        name<br> 1        北京 2        上海 3        深圳<br></p>
ログイン後にコピー

Use field()

<p>select id, name from regions order by field(id, 2, 3, 1);#id        name<br> 2        上海 3        深圳 1        北京<br></p>
ログイン後にコピー

これにより、カスタム順序で並べ替えるという目的が達成されます

パフォーマンス

<p>mysql> explain select id from regions order by field(id, 2, 3, 1);+---+-------------+---------+------+---------------+-----+---------+-----+------+-----------------------------+|id | select_type | table   | type | possible_keys | key | key_len | ref | rows | Extra                       ||-- | ----------- | ------- | ---- | ------------- | --- | ------- | --- | ---- | ----------------------------|  |1  | SIMPLE      | regions | index| NULL          | id  | 4       | NULL| 3    | Using index; Using filesort |+---+-------------+---------+------+---------------+-----+---------+-----+------+-----------------------------+<br></p>
ログイン後にコピー

を使用しているため、 Order By Field が指定されている場合、主キーは主キー ID に従ってソートされます。主キー インデックスが存在します。この ID を使用して、条件が 2、3、および 1 に等しいレコードを検索します。 Extra には、Using インデックスがあります。別のインデックスに変更すると、インデックスは存在しません。ここのフィールドにはインデックスがありません。 Order By 句はこのインデックスを使用できず、Filesort 並べ替えのみを使用できます。これが、Extra に Filesort の使用がある理由です。

#おおよそのプロセスは次のとおりです。 #ID インデックスから リーフ ノードから開始して、すべてのリーフ ノードを順番にスキャンします 各リーフ ノードによって記録された主キー ID に従って主キー インデックス (クラスター化インデックス) に移動し、実際の行データを見つけます

行データが id = 2, 3 を満たすかどうかを判定します。 1. 条件を満たしていれば取り出して返します


基本的にはテーブル全体を走査する必要がありますが、選択したレコードの ID を検索するという人もいますFIELD リスト内の位置をソート基準として使用して位置を返します。
このような使用法は、ファイルソートを使用することになります (もちろん、ファイルソートを使用すると必ずしも遅くなるわけではありません。使用しないより速い場合もあります)。これは非常に非効率な並べ替え方法です。

通常、ORDER BY 句は LIMIT 句と組み合わせて、一部の行のみを取得します。上位 1 行を取り出すためだけにすべての行をソートする場合、これは明らかに効率的なアプローチではありません。

概要

Field() 関数は、データベース層で必要な並べ替えを直接完了し、ビジネス コードを簡素化するのに役立ちますが、同時に次のことも行います。互換性とパフォーマンス 問題の提案は、データ変更の頻度が低い場所や長期キャッシュがある場所で使用できます。データ量が多い場合は、データベースを使用してデータをクエリし、データを並べ替えることができます。プログラム.

推奨される学習:《

mysql ビデオ チュートリアル

以上がこの記事では、Mysql が ID 値の順序に基づいて結果を返す方法について説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!