SQL最適化の神はあなたを興味深いSQL(6)SELFJOINのアプリケーションを書くように導きます

みなさん、こんにちは。私はZhishutangのSQL最適化クラスの先生です。画面名:カメに乗るウサギ

今日はSELFJOINのアプリケーションをお届けします

以下は、テーブル構造とINSERTステートメントスクリプトです。

 create table t0718 (
 idx int,
 no int ,
 val1 varchar(30),
 val2 varchar(10)
 );
 
 insert into t0718 values( 1 ,10 ,'1 2 3' ,'11');
 insert into t0718 values( 2 ,20 ,'4 5 6' ,'12');
 insert into t0718 values( 3 ,30 ,'7 8 9' ,'13');
 insert into t0718 values( 4 ,40 ,'4 8 9' ,'14');
 insert into t0718 values( 5 ,50 ,'1 4 8' ,'15');
 insert into t0718 values( 6 ,55 ,'3 2 9' ,'21');
 insert into t0718 values( 7 ,13 ,'7 0 4' ,'33');
 insert into t0718 values( 8 ,77 ,'1 6 9' ,'45');
 insert into t0718 values( 9 ,22 ,'5 7 8' ,'23');
 insert into t0718 values( 10 ,77 ,'8 0 9' ,'99');

上記のデータで、入力値が2の場合、見つかった場合はval1をクエリします。

次に、次の3行のデータから開始して、戻り結果は次のようになります。

これと同様に、特定の値を見つけてデータの問題の数行を見つけ始めるには、中断のない連続した列が必要です。

または、そうでない場合は、簡単にするために、このような列を人為的に作成する必要があります。

シーケンスの作成の問題を取り除き、直接与えます。そうでない場合は、

記事「SQL最適化偉大な神はあなたを興味深いSQL(5)カスタム変数のアプリケーション(1)を書くために連れて行ってくれます」を参照することができます。

上の図に示す結果を得たい場合は、分析してみましょう。

まず、pk、一意のキーなどの条件を満たす行の一意の値を見つけます。これがidxです。

次に、idxを取得して、idxより大きくidx + 3以下の値を見つけ、結果を返します。

上記の考えに従ってSQLを書く

ステップ2:idxを押したままにして、idxより大きくidx + 3以下の値を見つけ、結果を返します。

ここで返されるのはテーブルの内容であるため、半結合を使用することをお勧めします

上記のSQLは理解するのがより難しいです!

ここで説明すると、existsのt1テーブルの結果セットは、実際には2つの値1、6です。

次に、各tテーブルでidx(idx値は1から10)が1より大きく4以下または6より大きく9以下

写真のようです!

SQLにはいくつかの解決策があり、次のように書くこともできます。

2つのうち、私が初心者の場合は、後のJOINを無視できるので、最初の1つを選択します。

結果は再現性があり、用途が広いです。しかし、私が中級レベル以上のMySQL DBAである場合は、2番目のDBAを選択します。

SQLに精通している、ビジネスによると、重複する値がないことを保証します。これは、ここで関係するパフォーマンスの最適化に役立つためです。

実行計画の一部の分析、およびMySQL機能の問題は、このシリーズの範囲外です。

次のSQLは

正しい結果が得られるように見えますが、純粋に結果を得るために書かれており、普遍性がないため、

参考までに、SQLの多様性について議論する必要はありません。

みなさん、ありがとうございました〜転送へようこそ

私はZhishutangのSQL最適化クラスの教師です〜^^

SQLの最適化と通信について質問がある場合は、@兔子@知数堂SQLの最適化を追加してください。

高性能のMySQLおよびSQL最適化グループには、YeJinrongおよびWuBingxi:579036588が含まれます。

Zhishutangファミリーへようこそ。

この号から、ビデオとビデオアドレスが今日の見出しになります。

https://www.ixigua.com/i6716134286379975176/

以前の記事

1.より興味深いSQL(1)

https://www.toutiao.com/i6707064970636427789/

2.興味深いSQL(2):2つのテーブル間に接続条件がないJOIN

https://www.toutiao.com/i6708876385844199940/

3.興味深いSQL(3)行から列、列から行、およびコピー

https://www.toutiao.com/i6711483799634444808/

4.興味深いSQL(4)行から列への複雑なアプリケーションと最適化のアイデア

https://www.toutiao.com/i6712576799496208899/

5. SQL最適化の神は、興味深いSQLを作成するように導きます(5)カスタム変数の適用(1)

https://www.toutiao.com/i6713758942863819268/

誰もが見出し番号に注意を払います:SQLの開発と最適化

あなたは関連するビデオを見ることができます

TeacherYeの「MySQLCoreOptimization」クラスがMySQL8.0にアップグレードされました。コードをスキャンして、MySQL8.0の練習の旅を始めてください。

おすすめ

転載: blog.csdn.net/n88Lpo/article/details/111243457