商品No 2. 商品カテゴリ 3.
エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」 ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。 基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。 それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか? 卒業生の多くがWebエンジニアとして活躍 卒業生の多くがWeb企業で活躍しております。 実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。 活躍する卒業生のインタビューもございますので是非御覧ください。 経験豊富なエンジニア陣が直接指導 実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。 有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。 満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」 運営する株式会社ポテパンは10, 000人以上のエンジニアのキャリアサポートを行ってきております。 そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。 代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。 本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。
本記事は、 サムザップ Advent Calendar 2020 #2 の12/19の記事です。 この記事では、MySQLのindexの基本的な事を書きます。 さらっと流して読んで頂ければ。 mysql> select version(); +-----------+ | version() | | 5. 7. 31 | 1 row in set (0.
SQL自体を記述出来るエンジニアは多いですが、パフォーマンスのことまで考慮したSQL文を作成出来るエンジニアというのは意外と少ないものです。 今回はSQLのパフォーマンスを改善するために、エンジニアがデータベース処理を実装する際、意識しておきたいポイントをご紹介していきたいと思います。 SQLのパフォーマンスを改善するには?!
2020/9/30追記 本記事は元々、「SQL記述者全員が理解すべきSELECT文の実行順序のお話」というタイトルで投稿しておりました。 しかし、知見のある方からのコメントと自分でも調べてみた結果、今回紹介している順序はあくまで論理的な処理順序であり、実行順序とは別物ということがわかりました。 誤った知識を布教してしまい申し訳ございません。 2020/9/30のタイミングで、本記事のタイトルを「SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話」に変更させていただきました。 「SQLといえば、エンジニアが扱うスキル」と思われがちですが、最近はマーケターや営業など、非エンジニアの方もSQLを使って、自らデータを抽出し分析する方が増えてきています。 またエンジニアの方でも、ORM任せでなんとなく理解している状態の方もいるのではないでしょうか? 今回は、そんな方々にこそぜひ理解していただきたい SELECT文の実行順序 についてお話したいと思います。 SELECT文を書いたことがある方であれば、一度はこんな疑問を抱いたことがあるのではないでしょうか? 「なんでWHERE句でSUM関数(集約関数)は使えないの?」 「なんでSELECT句のASはORDER BY句では使えるのに、WHERE句では使えないの?」 「なんでLIMITで出力行数を絞っているのに、処理時間は変わらないの?」 これらすべて、今回お話する SELECT文の実行順序 を理解すれば誰でも説明できるようになれます! データベースがSQLを実行する際、上から(SELECT句から)実行するイメージを持っている方が多いのではないでしょうか? 実はこれ間違いで、データベースは下記順序でSQLを実行していきます。 FROM句 ↓ JOIN句 WHERE句 GROUP BY句 HAVING句 SELECT句 ORDER BY句 LIMIT句 この順序を念頭に置いて、問いかけで出した疑問を1つずつ見ていきましょう。 SUM関数やCOUNT関数など、 グループ化された データに対して処理をかけ1つの値にまとめる関数を集約関数と呼びます。 この グループ化された が重要で、SELECT文の中では GROUP BY句 がそれに該当します。 それでは、もう一度実行順序を見てみましょう。 **WHERE句** **GROUP BY句** GROUP BY句よりもWHERE句の方が先に実行される、つまりWHERE句の時点ではまだグループ化がされていないことがわかるかと思います。 そのため、WHERE句でSUM関数やCOUNT関数といった集約関数を使うことができないのです。 逆に、HAVING句で集約関数を使えるのは、その前にGROUP BY句の処理が実行されグループ化されているためでもあります。 ASはカラムやテーブルに対して、別名を宣言できる処理です。 可読性の向上や別テーブルの同一名カラムを扱う際によく使われますね。 そんな便利なASですが、なぜWHERE句で別名を使えないのでしょうか?
* FROM TAB1 a, TAB2 b WHERE L1 = L1 ・テーブル結合の順序を任意に決めたい場合のヒント SELECT /*+LEADING(b, a)*/ a. * FROM TAB1 a, TAB2 b WHERE L1 = L1 ・テーブル同士をネステッドループで結合したい場合のヒント SELECT /*+USE_NL(a b)*/ a. * FROM TAB1 a, TAB2 b WHERE L1 = L1 ・テーブル同士をハッシュジョインで結合したい場合のヒント SELECT /*+USE_HASH(a b)*/ a. * FROM TAB1 a, TAB2 b WHERE L1 = L1 ※もちろん、複数のヒントを同時に利用することもできます。 ・ORDEREDヒントとUSE_NLを同時に利用した場合 SELECT /*+ORDERED USE_NL(a b)*/ a.
COL1 = T2. COL2 ( +) 1 # 型変換 代入やWHERE句の条件設定などでデータ・タイプが異なる場合、明示的にタイプ変換を行う。(暗黙の型変換は使用しない) # 比較演算子 「等しくない」を示す演算子は「! = 」を利用する。「 <> 」「 ^= 」も動作するが統一の観点から利用しない。 # ORDER BY句 ORDER BY 数字の構文は使用せずに、カラム名を記載する。 # GROUP BY句 GROUP BY 数字の構文は使用せずに、カラム名を記載する。 集約関数を利用する場合は必ず記載すること。(省略可能であっても省略しない) # EXISTS句 EXISTS句を記載する際、サブクエリになるSELECT句の指定は定数「 1 」とする。 「 * 」(ワイルドカード)や「 'X' 」は統一の観点から利用しない。 また「 * 」(ワイルドカード)についてはパフォーマンスの観点からも禁止とする。 良い例: WHERE EXISTS ( FOO F F. COL1 = M. KEY) 1 2 3 4 5 6 7 8 9 # AS句 トップレベルのSELECT句には必ず AS 句を記載し別名を付ける。 同一の名前であってもAS句を付与する。 また、「 AS 」は省略可能であるが、省略はしないこと。 # WHERE句 論理名の記載 WHERE句でカラムと式を比較する際は左辺がカラムになるように記載すること。 良い例: WHERE TBL. COLUMN1 = 1 AND TBL. AMOUNT2 > TBL. AMOUNT3 + TBL. AMOUNT4 1 2 3 条件式の順序 原則として、WHERE句で条件式を列挙する際、下記の順序を守ること。 テーブル単位にまとめて順番に記述する この際、テーブルの順序はFROM句に記述した順序に準ずること。 1. のテーブル単位の中で絞り込み条件をまず記述し、その後結合条件を記述する。 良い例: FROM A_TABLE A, B_TABLE B, C_TABLE C A. KEY1 =? AND A. KEY2 =? AND B. KEY1 =? AND B. COL1 = A. COL1 AND C. KEY1 =? AND C. KEY2 =? AND C. COL2 = A. COL2 AND C. COL3 = B. COL3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # COUNT文 レコード数を数えるCOUNT文の記述は COUNT(*) と記述する。 COUNT(1) ・ COUNT('X') ・ COUNT(KEY1) という記載はNG。 本章ではパフォーマンス性を高めることを目的としたコーディング規約について記載する。 # 検索 検索処理におけるコーディング規約を下記に示す。 中間一致、後方一致検索はインデックスを利用できないため避ける 検索条件で = (等号)を使用できる場合は必ず使用する A=1 or A=2 とする方が A>0 and A<3 などと記述するのよりパフォーマンス上優位な場合が多い。 これはAにインデックスがある場合、 = であれば、インデックスが有効に使われるためである。 可能な限り検索条件にパーティションキーの値を指定する 全列ワイルドカード「 * 」の使用はせず、カラム名を明記する インデックスによる検索を指定したい場合、下記の記載を行わない インデックスカラムを含む演算に対して条件指定 悪い例: 良い例: インデックスカラムに関数を通した値に対して条件指定 悪い例: TO_CHAR ( TBL1.