主に仕事に関するブログ

システム開発/IT講師での出来事など

「なぜjoinしたときに結合したテーブルが作られないのか?」の説明用の図

初学者にSQLを説明しているときに、なぜjoinしたときに、結合したテーブルが作られないのかとご質問いただきました。

「結合したテーブルはメモリ上にあるから」を説明しただけですが、そのとき説明に使った図を書いてみました。

この図は、あくまで初学者の説明用に作ったものなので、いろいろ嘘が多いですので、そこはご了承ください。

f:id:tomaldcallahan:20180401065752p:plain

MySQLのチューニングポイント

PHPカンファレンス2017〕のMySQLのセッションを聴講して

PHPカンファレンス2017〕のMySQLのセッションを聴講して、非常にためになったが、
すぐに忘れてしまうので、要点をメモ。
MySQLの手短に行うチューニングのポイントは、以下の4つとのこと。

  1. スローログをみれるようにする。

    • 以下のように設定するとスローログが出力されるようになる。

      name default recommend
      slow_query_log 0(off) 1(on)
      long_query_time 10 0.2(まあ、都合のように0.2~0.5)
      log_output FILE FILE

    スローログを見て、特定のクエリが、遅い場合は、そのクエリをチューニングすればよいことになるが、
    以下を考慮する。

    • Rows_examined/Rows_sentが小さいこと(31くらい)
      • Rows_examined・・・クエリーがスキャンした行数
      • Rows_sent・・・クエリがアプリに返す結果セットの行数(更新系は0となる)
  2. バッファープールについて理解する

    • ここはなんとなくわかるので割愛。
    • ただ、留意点として、次項のインデックスをきれいに使うと、バッファープールも小さくなる。
  3. インデックスについて

    • 基本的には
      where column1 = value1 and column2 = value2 order by column3 のように =とandしか使用していないときは、 column1、column2、column3にインデックスをはればよいらしいが、joinは、大変になる。
  4. 劇薬に手を出さない

    以下のような設定などは、早くなるが、復旧できなくなる可能背があるので、行わないようにする。

    • skip_innodb_doublewrite
    • innodb_flush_log_at_try_commit <> 1
    • sync_binlog <> 1
    • パラメータ名にunsafeと入っているやつ
    • MyISAMストレージエンジン
  5. 補足

    自分でよく分からなかったことを以下に調べた。

    • バイナリログとログファイルの違い

      ログ 説明
      バイナリログ MySQL上の変更をすべて記録したログ。Oracleアーカイブに相当するように思う。
      ログファイル(REDOログ) これは、MyISAMにはなく、InnoDBに存在する。トランザクションのためのログと考えられる。OracleREDOログに該当すると考えられる。

今年のIT講師所感メモ

今年で、IT講師を始めて3年になりました。

まだ、3年ですが、大手SIerさんの新人研修を担当する際に、気を付けなければいけないと思ったことを書きたいと思います。


  1. 講師は自分の使命を持てというが・・・

    • 講師は自分の使命を持てといいます。ITの新人技術研修なのですから、新人が実際に業務を行うのにスムーズに入れるように技術を習得させるのが使命となります。
    • なのでできるだけ教えます。Javaの基本文法は勿論、普通のfor文と拡張for文をどちらがどのような理由でどちらがよくつかわれるまで教えます。
    • また、業務にスムーズに入ることができるようにするのが使命なので、エクセルのセル内の改行なども説明します。
  2. 講義の中で

    1. 下線を引かせる
      • 演習で、この線が引いてあるところねと言うことができる。
        • まあ、証拠ということ。
      • あと、復習しやすくなる。
        • セミナーと研修は異なる。セミナーは聞くだけ、研修は復習を伴う。
    2. メモを取らせる
      • 補足で説明したことでも、キーワードはメモさせる。
        • 例えば、オートボクシングなど。
        • これは、後にQuesとなりうる。
  3. Java

    • if文とfor文の構造
      • ()が条件
      • {}が処理
      • 但しメソッドの()には引数が入ることを明示。
    • なぜif文にカウント変数があるのか?
      • カウント変数と使用する場面が多い。
      • 配列などで。
    • User user = new User();
      • としたとき、インスタンスを生成するために使用するのはコンストラクタだが、userには、クラス全部が入っている点を明示する。
    • User user = new User(); *としたとき、userの中のメソッドが全て実行されると誤解する方がいるので、その点、注意する。
      • 説明としては、実行したいメソッドの順番があるので、いっぺんに実行は困る
      • また、戻り値と引数を用いて利用者側で使われる方に依頼していることを述べる。
    • メソッドを「呼ぶ」「使う」「メッセージを送る」などの言い方と戻り値、引数の関係を説明する必要があるかもしれない。
    • リストは配列との対応表を用意するよい。
      • リストだと要素が無駄にならない。
    • nullの説明を忘れないようにする
  4. Javaの文法

    • int a = 0;
      • これが基本になるので、よく覚えてくださいという。
        • 型 変数=代入値
        • 以下に発展
    • ifは以下のような言葉が現れたら書く。
        * もし何々だったら?
        * かどうか?
      
    • newとコンストラク
  5. サーブレット

    • やはり、doGetの引数が気になるようなので、図を書いて説明する。
    • あと、クエリストリングのイメージが付きにくい
      • しっかり説明などする必要がある
      • 複数の場合も
      • なぜ?をつけるかなどもいう(決まりだというしかないが・・・)
        • 決まりだからを強調、RFPというものがあって
        • 付けないとどうなるか?
    • form * name属性がキーであることをしっかり言う。
      • name属性がkey属性ではないのは、name属性が他の目的があり、たまたまname属性を使っているかもしれないからかも
  6. 開発演習

    • 開発演習には見積の話が出る→見積方法について話す
  7. 細かい講師メソッド

    • ZoomItの多用
      • 下線、四角囲み、矢印、タイマーの機能を多用して、わかりやすくします。
    • 指し棒を使用すること
      • 手だと、受講生に違和感を与えるよう。
    • 休憩時間
      • 何時までといのをホワイトボードに記載する。
    • 関連付けを行うこと
      • 講義の内容とテスト
      • Javaサーブレットの講義と開発演習
        • 具体的にここは後で使うといってもいいかもしれない。
    • 私たちはとか、我々はとかいうようにする。
    • 注目させるときに、片手を高く上げる。
    • はじめは受講生の信頼を得るため、怒らず、言い分を聞くようにする。信頼関係ができたところで、厳しく言うことも可能になる。
    • 社会人としての姿を見せる。
      • 朝は、早くいく(私の場合、1時間以上前、ただし会場に迷惑がかかる場合もあるので注意)
      • 質問を受けて、わからない場合は、調べておきますと言って、翌日、解説する。
      • 質問を受けた事項は、教室全体に共有する。
      • 教室の運営的な事項でも、質問を受け、わからない場合は、運営側に聞いてから答える。
  8. 反省点

    • 時間外の学習も含めた自助努力
      • 復習しますという報告(日報)の確認を授業中に聞いてみるなどして、確認する必要がある。
        • 復習、予習を促進するため
        • 自己研鑽の習慣付け