納期と教育

自分でやれば早い(業務時間中とは言っていない)

最近技術のわからないリーダー業務をしつつ、遅れているメンバーのタスクを助けています。
金曜日の朝、メンバーの一人から開発中の機能にバグの報告がありました。
クエリが思ったように動かないとのこと…。
他のメンバーも交えて1時間くらい格闘したっぽいのですが、ちょっと解決しそうにないのでそれは後回しにして、他の作業を進めてもらっていました。

夕方私もそのクエリを眺めて、結局1時間くらいでとりあえずUNIONを使った突貫工事に成功。
金曜日はそれで終わり、今日は抽象化したテーブルを自宅で作ってUNIONを取っ払う作業をしていました。
恥ずかしながら3時間くらい…できてしまえば大したことないのですが…。

私は結構SQL好きですし、そのあとexplainも眺めていい感じのINDEXも考えて、と楽しく自習していたのですが、
ふと思ったのは最初に担当していた後輩ちゃんのことです。

コウノ
コウノ

この子は次回おなじようなクエリを作る機会があったとき、自力で作れるのかな…。

自宅でお勉強するならいいのですが、そうでは無ければ業務時間に難易度の高い仕事を取り上げてしまったような形になるのか、と思います。

納期と教育

私が彼女と同じくらいのキャリアの時、
INDEXの存在も知らない状況で、リーダーに「パフォーマンス改善しておいて」と言われてEXPLAINという単語だけ教えてもらって試行錯誤しました。
めっちゃ残業して、本を買って、自宅でクエリいじってました。
結構スパルタというか、私が自分でできないと言わなかったのが悪いのですが、結果的に教育の機会をいただきました。
なのに今、後輩ちゃんに教育の時間をさけていないのです。

今納期が危うく、後輩ちゃんにも自分のできることをバリバリ進めてもらわないと困るのです。APIをどんどんテストしてフロントに渡してもらわないとフロントが止まってしまいます。
教育的にはすごく悪いのですが。

しかし、これは彼女にやらせていた時結局どのくらいかかったんだろう、とかできたのだろうか、とかも思います。UNIONを使ったものくらいまではできたと思うけど…。私も時間をかけてからこのパフォーマンスまで持って行けたのであって、一目でアドバイスできないと思うのです。そのあたりの兼ね合いは、また難しいですね。

来週は楽するために教育する

長い目で見れば彼女に自力で考えてもらったほうがよいです。
そしてできれば業務時間外に自習してくれると嬉しいのですが、私にはそこまでの強制力はありません。
業務でやらせてもらえないことができない、という状況を自己責任というのは酷なので、しかし時間も大切なので、
今回はクエリは渡して、INDEXについては教えてあとで貼ってもらおうかな、と思います。

急いでいるときは高難度のことでなく、知識から積み上げて着実にタスクも教育も進めていきたい所です。

楽しいクエリなのでおまけに出題

やりたいこととしてはスケジュールに紐づく一対多のリマインドテーブルがあって、以下の条件を満たすスケジュール一覧を出す、というものです。

  1. 未来の日時なら直近のリマインドを、
  2. すべて過去なら最新のリマインドを、
  3. キャンセルがあるならその最古のリマインドをその状態とともに一覧にする、

制限事項としては
MySQL7系なので、ウィンドウ関数は使えません。
UNION使わないでやること。
explainが7行以下になるなら私に教えてください。(現状私の実行計画は8行)

CREATE TABLE `schedules`(
    `schedule_id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
    `schedule_date` DATETIME NOT NULL,
    PRIMARY KEY(`schedule_id`)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
;

CREATE TABLE `reminds`(
    `remind_id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
    `schedule_id` INT(11) unsigned NOT NULL,
    `schedule_date` DATETIME NOT NULL,
    `status` VARCHAR(10) NOT NULL,
    PRIMARY KEY(`remind_id`)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
;

コメント

タイトルとURLをコピーしました