みなさん、こんにちは。私は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の練習の旅を始めてください。